2016-02-25 11 views
-1

2^29 -1? 因为“字段编号1-15有一个1字节标签”。
32字节没有标签?我知道3字节,但为什么没有标签?为什么2^29-1是协议缓冲区中最大的密钥

是那个varint?我无法理解protobuf \ descriptor.cc源代码。

+1

https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.descriptor – diwangkai

回答

1

所有字段都有标签,但对于字段编号为16或更高的标签需要多个字节。因此,场号1至15应该用于最常用的字段。是的,编码是varint。

最大的键是2^29,因为最低的3位用于存储字段数据类型。所以29 + 3 = 32整齐地适合于uint32_t

您将在这里找到更多的信息: https://developers.google.com/protocol-buffers/docs/encoding#structure

+0

最大的关键2^29,其中标签? – diwangkai

+0

每字节7位,一位是标记,所以4 * 7 = 28,28 - 最低3 = 25不是29 – diwangkai

+0

@diwangkai不幸的是我不明白你在说什么。没有理由将7位varint编码限制为4个字节。我不知道“一点是标签”的含义。 – jpa