Enligt ObjectId-dokumentationen , den strängen du ser är en hexadecimal representation av de 12 byten. Det är inte Unicode eller ens en sträng. Det är faktiskt en siffra.
En byte är 8 bitar, vilket betyder att den kan ha 2^8 ==256 möjliga värden (se Byte ).
Hur representerar du ett tal med 256 möjliga värden kortfattat? Vad sägs om att representera det som 16^2 istället? Du kan uppnå detta genom att använda 2 hexadecimala värden (bas 16). Det enda du behöver uppfinna är ett numreringssystem som går till 16 istället för 10.
Faktum är att vi använder bokstäver från a
till f
för att representera värdena 10 till 15.
Således kan en byte representeras i två hexadecimala tal. Det råkar bara använda a
till f
eftersom vi inte kunde bry oss om att uppfinna speciella symboler för dem. De är inte bokstäver. De är siffror.
Så nej, strängen du ser i ObjectId representerar inte 24 byte. Vartannat tecken representerar istället en byte. 24 hexadecimala tal ==12 byte.