令人困惑的Google Protobuf字段

时间:2018-11-13 13:12:50

标签: c++ protocol-buffers

我正在使用https://protogen.marcgravell.com/decode分析一些protobuf数据,但我无法理解这一点:

enter image description here

我正在阅读protobuf编码指南,可以看到数据不必是字符串,而是长度分隔的string, bytes, embedded messages, packed repeated fields

我不明白的是为什么它在字段105中有一个非常好的字符串apples1,但是对于同一个字段105却有3倍随机空有效载荷?这与第三方对我所使用的protbuf的使用有些奇怪,还是我想念的其他东西?

谢谢。

1 个答案:

答案 0 :(得分:3)

关于空字符串,没有什么特别不寻常的;但是,它们也很可能是子消息-只是没有任何有趣属性的对象。 nil (未分配/ null等)子消息根本不会出现,但是 non-nil 子消息却没有任何有趣的内容将是:一个零字节的二进制字符串(以protobuf术语)。

同样,一个bytes字段被明确分配了一个零长度的缓冲区:它将是一个零字节的二进制字符串。并且:具有零个元素的“打包”数组:将是一个零字节的二进制字符串。

所以:这里没有什么不寻常的地方-在各种情况下,这都是完全正常且可以预期的protobuf。


由于字段号不变,所以听起来像这样:

 repeated string whatever = 105;

obj.Whatever = [ "apples1", "", "", "" ];

奇怪,但不是无效的。