Según la documentación de ObjectId , esa cadena que ves es una representación hexadecimal de los 12 bytes. No es Unicode ni siquiera una cadena. En realidad es un número.
Un byte tiene 8 bits, lo que significa que puede tener 2^8 ==256 valores posibles (ver Byte ).
¿Cómo se representa un número con 256 valores posibles de forma sucinta? ¿Qué tal representarlo como 16 ^ 2 en su lugar? Puede lograr esto usando 2 valores hexadecimales (base 16). Lo único que necesitas inventar es un sistema de numeración que llegue a 16 en lugar de 10.
De hecho, usamos letras de a
a f
para representar valores del 10 al 15.
Así, un byte se puede representar en dos números hexadecimales. Simplemente sucede que usa a
a f
ya que no podíamos molestarnos en inventar símbolos especiales para ellos. no son letras Son números.
Entonces no, la cadena que ve en ObjectId no representa 24 bytes. Cada 2 caracteres representan un byte en su lugar. 24 números hexadecimales ==12 bytes.