Съгласно документацията за ObjectId , този низ, който виждате, е шестнадесетично представяне на 12-те байта. Това не е Unicode или дори низ. Това всъщност е число.
Един байт е 8 бита, което означава, че може да има 2^8 ==256 възможни стойности (вижте Байт ).
Как представяте накратко число с 256 възможни стойности? Какво ще кажете вместо това да го представите като 16^2? Можете да постигнете това, като използвате 2 шестнадесетични стойности (база 16). Единственото нещо, което трябва да измислите, е система за номериране, която отива на 16 вместо на 10.
В интерес на истината ние използваме букви от a
към f
за представяне на стойности от 10 до 15.
Така един байт може да бъде представен в две шестнадесетични числа. Случайно се използва a
към f
тъй като не можехме да си направим труда да измислим специални символи за тях. Те не са букви. Те са числа.
Така че не, низът, който виждате в ObjectId, не представлява 24 байта. Вместо това всеки 2 знака представляват байт. 24 шестнадесетични числа ==12 байта.