I henhold til ObjectId-dokumentationen , er den streng, du ser, en hex-repræsentation af de 12 bytes. Det er ikke Unicode eller endda en streng. Det er faktisk et tal.
En byte er 8 bit, hvilket betyder, at den kan have 2^8 ==256 mulige værdier (se Byte ).
Hvordan repræsenterer du et tal med 256 mulige værdier kortfattet? Hvad med at repræsentere det som 16^2 i stedet for? Du kan opnå dette ved at bruge 2 hexadecimale værdier (grundlag 16). Det eneste, du skal opfinde, er et nummereringssystem, der går til 16 i stedet for 10.
Faktisk bruger vi bogstaver fra a
til f
for at repræsentere værdierne 10 til 15.
En byte kan således repræsenteres i to hexadecimale tal. Det tilfældigvis bruger a
til f
da vi ikke kunne være ulejlighed at opfinde specielle symboler til dem. De er ikke bogstaver. De er tal.
Så nej, strengen du ser i ObjectId repræsenterer ikke 24 bytes. Hvert andet tegn repræsenterer i stedet en byte. 24 hex-tal ==12 bytes.