为什么 2^29-1 是协议缓冲区中最大的键
why 2^29-1 is the biggest key in protocol buffers
2^29 -1 ?
因为"Field numbers 1-15 have a 1-byte tag."
32字节没有tag?我知道3字节,但为什么没有标签?
那是 varint 吗?我无法理解 protobuf\descriptor.cc 源代码。
所有字段都有一个标签,但对于编号为 16 及更高的字段,标签需要多个字节。因此,字段编号 1 到 15 应该用于最常见的字段。是的,编码是 varint。
最大的键是2^29,因为最低3位用于存储字段数据类型。所以 29 + 3 = 32 正好符合 uint32_t
.
您可以在此处找到更多信息:
https://developers.google.com/protocol-buffers/docs/encoding#structure
2^29 -1 ?
因为"Field numbers 1-15 have a 1-byte tag."
32字节没有tag?我知道3字节,但为什么没有标签?
那是 varint 吗?我无法理解 protobuf\descriptor.cc 源代码。
所有字段都有一个标签,但对于编号为 16 及更高的字段,标签需要多个字节。因此,字段编号 1 到 15 应该用于最常见的字段。是的,编码是 varint。
最大的键是2^29,因为最低3位用于存储字段数据类型。所以 29 + 3 = 32 正好符合 uint32_t
.
您可以在此处找到更多信息: https://developers.google.com/protocol-buffers/docs/encoding#structure