ObjectIdドキュメント による 、表示されるその文字列は、12バイトの16進表現です。 Unicodeでも文字列でもありません。実際には数字です。
バイトは8ビットです。つまり、2 ^ 8 ==256の可能な値を持つことができます(バイト<を参照) / a> 。
256の可能な値で数値を簡潔に表すにはどうすればよいですか?代わりに16^2として表現するのはどうですか?これは、2つの16進値(基数16)を使用して実現できます。発明する必要があるのは、10ではなく16になる記数法だけです。
実際のところ、a
からの文字を使用しています f
へ 10から15の値を表します。
したがって、1バイトは2つの16進数で表すことができます。たまたまa
を使用しているだけです f
へ 彼らのために特別なシンボルを発明することをわざわざすることができなかったので。それらは文字ではありません。それらは数字です。
つまり、ObjectIdに表示される文字列は24バイトを表していません。代わりに、2文字ごとに1バイトを表します。 24の16進数==12バイト。