Sesuai dengan dokumentasi ObjectId , string yang Anda lihat adalah representasi hex dari 12 byte. Ini bukan Unicode atau bahkan string. Ini sebenarnya angka.
Satu byte adalah 8 bit, artinya dapat memiliki 2^8 ==256 kemungkinan nilai (lihat Byte ).
Bagaimana Anda merepresentasikan angka dengan 256 kemungkinan nilai secara ringkas? Bagaimana kalau mewakilinya sebagai 16^2 saja? Anda dapat mencapai ini dengan menggunakan 2 nilai heksadesimal (basis 16). Satu-satunya hal yang perlu Anda ciptakan adalah sistem penomoran yang menggunakan 16 bukannya 10.
Faktanya, kami menggunakan huruf dari a
ke f
untuk mewakili nilai 10 hingga 15.
Dengan demikian, satu byte dapat direpresentasikan dalam dua bilangan heksadesimal. Kebetulan menggunakan a
ke f
karena kami tidak dapat diganggu untuk menciptakan simbol khusus untuk mereka. Mereka bukan huruf. Mereka adalah angka.
Jadi tidak, string yang Anda lihat di ObjectId tidak mewakili 24 byte. Setiap 2 karakter mewakili satu byte sebagai gantinya. 24 angka heksadesimal ==12 byte.