protocol-buffers - Protocol buffers 负 int32/int64 编码器的规范是模糊的

标签 protocol-buffers

在 Protocol Buffer 的编码器规范中https://developers.google.com/protocol-buffers/docs/encoding ,据说:

If you use int32 or int64 as the type for a negative number, the resulting varint is always ten bytes long – it is, effectively, treated like a very large unsigned integer

好吧,看起来不错,但是使用 10 字节长的 varint,您可以存储 70 位长的整数,并且类型是 64 位。因此,有 6 位未使用...这些位应该设置为 1 还是 0?

总结一下,对于int32/64,应该将-1编码为

FF FF FF FF FF FF FF FF FF 7F

FF FF FF FF FF FF FF FF FF 01

最佳答案

第 64 位及以上位应为零。因此,在 C++ 中,您可以通过将 int64 转换为 uint64 来对其进行编码,然后像任何其他无符号整数一样对其进行编码(这实际上是 Protobuf C++ 库所做的)。请记住,int32 需要符号扩展为 64 位。

关于protocol-buffers - Protocol buffers 负 int32/int64 编码器的规范是模糊的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28533167/

相关文章:

java - Protobuf java 代码有构建错误

c++ - 从扩展 ascii 到 utf 8 的转换

c++ - Protobuf 消息中的消息标识符

c# - 带有扩展的 Protocol Buffer

c - Nanopb 从 pb_ostream_t 获取字符串

java - 运行时无法识别等于默认值的 Proto3 设置值

python - Protocol Buffer导入解析

python - 在 python 中使用 google protobuf 反射

java - 要使用模式反序列化的 byte[] 中的对象类型?

c++ - 如何在不复制 C++ 的情况下分配嵌套的 protobuf?