Protocol buffers 协议缓冲区负int32/int64编码器';s的规格是模糊的

Protocol buffers 协议缓冲区负int32/int64编码器';s的规格是模糊的,protocol-buffers,Protocol Buffers,在协议缓冲区的编码器规范中,据说: 如果使用int32或int64作为负数的类型,则结果变量的长度始终为10字节–实际上,它被视为非常大的无符号整数 好的,看起来不错,但是使用10字节长的变量,可以存储一个70位长的整数,类型是64位。因此,有6位未使用。。。这些位应该设置为1还是0 总之,对于int32/64,是否应将-1编码为 FF FF FF FF FF FF 7F 或 FF FF FF FF 01 ?位64及以上应为零。因此,在C++中,您将通过将它转换为UIT64来编码一个It64,然

在协议缓冲区的编码器规范中,据说:

如果使用int32或int64作为负数的类型,则结果变量的长度始终为10字节–实际上,它被视为非常大的无符号整数

好的,看起来不错,但是使用10字节长的变量,可以存储一个70位长的整数,类型是64位。因此,有6位未使用。。。这些位应该设置为1还是0

总之,对于int32/64,是否应将
-1
编码为

FF FF FF FF FF FF 7F

FF FF FF FF 01


?位64及以上应为零。因此,在C++中,您将通过将它转换为UIT64来编码一个It64,然后像任何其他无符号整数一样编码它(这实际上是原BuffC++ C++库所做的)。请记住, It32/<代码> S需要扩展到64位。

注意到,例如谷歌的C++原型BuffBF将正确地解码非符号扩展的负It32,但是Python原型Bufff不会。如果有一些实现做得不正确,我不会感到惊讶,至少有一个()