在协议缓冲区https://developers.google.com/protocol-buffers/docs/encoding的编码器规范中,可以说:
如果使用int32或int64作为负数的类型,则生成的varint总是十个字节长 - 实际上,它被视为一个非常大的无符号整数
好的,看起来不错,但是有一个10字节长的varint,你可以存储一个70位长的整数,类型是64位。因此,有6位未使用...这些位应设置为1还是0?
到summup,使用int32 / 64,-1
应编码为
FF FF FF FF FF FF FF FF FF 7F
或
FF FF FF FF FF FF FF FF FF 01
答案 0 :(得分:2)
64位及以上应为零。因此,在C ++中,您可以通过将int64转换为uint64来编码int64,然后像任何其他无符号整数一样编码(这实际上是Protobuf C ++库所做的)。请记住,int32
需要符号扩展为64位。