Come da documentazione ObjectId , quella stringa che vedi è una rappresentazione esadecimale dei 12 byte. Non è Unicode e nemmeno una stringa. In realtà è un numero.
Un byte è 8 bit, il che significa che può avere 2^8 ==256 valori possibili (vedi Byte ).
Come si rappresenta sinteticamente un numero con 256 valori possibili? Che ne dici di rappresentarlo invece come 16^2? È possibile ottenere ciò utilizzando 2 valori esadecimali (base 16). L'unica cosa che devi inventare è un sistema di numerazione che arrivi a 16 invece di 10.
In effetti, utilizziamo lettere da a
a f
per rappresentare i valori da 10 a 15.
Pertanto, un byte può essere rappresentato in due numeri esadecimali. Capita solo di usare a
a f
dal momento che non potevamo preoccuparci di inventare simboli speciali per loro. Non sono lettere. Sono numeri.
Quindi no, la stringa che vedi in ObjectId non rappresenta 24 byte. Ogni 2 caratteri rappresentano invece un byte. 24 numeri esadecimali ==12 byte.