Selon la documentation ObjectId , cette chaîne que vous voyez est une représentation hexadécimale des 12 octets. Ce n'est pas Unicode ou même une chaîne. C'est en fait un nombre.
Un octet est de 8 bits, ce qui signifie qu'il peut avoir 2^8 ==256 valeurs possibles (voir Byte ).
Comment représenter succinctement un nombre avec 256 valeurs possibles ? Que diriez-vous de le représenter par 16 ^ 2 à la place ? Vous pouvez y parvenir en utilisant 2 valeurs hexadécimales (base 16). La seule chose que vous devez inventer est un système de numérotation qui va jusqu'à 16 au lieu de 10.
En fait, nous utilisons des lettres de a
à f
pour représenter les valeurs 10 à 15.
Ainsi, un octet peut être représenté par deux nombres hexadécimaux. Il arrive juste d'utiliser a
à f
puisque nous ne pouvions pas nous donner la peine d'inventer des symboles spéciaux pour eux. Ce ne sont pas des lettres. Ce sont des chiffres.
Donc non, la chaîne que vous voyez dans ObjectId ne représente pas 24 octets. Tous les 2 caractères représentent un octet à la place. 24 nombres hexadécimaux ==12 octets.