Podle dokumentace ObjektId , ten řetězec, který vidíte, je hexadecimální reprezentace 12 bajtů. Není to Unicode nebo dokonce řetězec. Je to vlastně číslo.
Bajt má 8 bitů, což znamená, že může mít 2^8 ==256 možných hodnot (viz Byte ).
Jak stručně znázorníte číslo s 256 možnými hodnotami? Co takhle to reprezentovat jako 16^2? Toho dosáhnete použitím 2 hexadecimálních hodnot (základ 16). Jediná věc, kterou musíte vymyslet, je systém číslování, který jde do 16 místo 10.
Ve skutečnosti používáme písmena z a
na f
reprezentovat hodnoty 10 až 15.
Jeden byte tedy může být reprezentován dvěma hexadecimálními čísly. Náhodou se používá a
na f
protože jsme se nemohli obtěžovat vymýšlet pro ně speciální symboly. Nejsou to dopisy. Jsou to čísla.
Takže ne, řetězec, který vidíte v ObjectId, nepředstavuje 24 bajtů. Každé 2 znaky představují místo toho bajt. 24 hexadecimálních čísel ==12 bajtů.