MongoDB ObjectID 12 字节如何?

Ste*_*oid 1 mongodb

据我所知,MongoDB 中的字符串以 UTF-8 格式存储,因此每个字符在 1 到 4 个字节之间。

MongoDB 文档说明了以下关于 ObjectID 的内容

返回一个新的 ObjectId 值。12 字节的 ObjectId 值包括:

一个 4 字节的值表示自 Unix 纪元以来的秒数,
一个 5 字节的随机值和
一个 3 字节的计数器,从一个随机值开始。

在一个例子中,它显示ObjectId("507f1f77bcf86cd799439011"). 这个字符串虽然在 UTF-8 中是 24 个字节,所以我不明白 12 个字节在哪里发挥作用。

kev*_*adi 10

根据ObjectId 文档,您看到的字符串是 12 个字节的十六进制表示。它不是 Unicode,甚至不是字符串。它实际上是一个数字。

一个字节是 8 位,这意味着它可以有 2^8 == 256 个可能的值(请参阅Byte)。

您如何简洁地表示具有 256 个可能值的数字?把它表示为 16^2 怎么样?您可以通过使用 2 个十六进制值(基数为 16)来实现这一点。您唯一需要发明的就是一个编号系统,该系统编号为 16 而不是 10。

事实上,我们使用字母 from atof来表示值 10 到 15。

因此,一个字节可以用两个十六进制数表示。它只是碰巧习惯了af因为我们懒得为它们发明特殊的符号。它们不是字母。他们是数字。

所以不,您在 ObjectId 中看到的字符串不代表 24 个字节。每 2 个字符代表一个字节。24 个十六进制数 == 12 个字节。