协议缓冲区 - 为什么 int32 和 sint32 以相同的方式映射
Protocol Buffers - Why int32 and sint32 are mapped in the same way?
在协议缓冲区中,有几种整数类型。例如,对于 32 位 int,有 int32、sint32 和 uint32。
在文档中解释了差异(请参阅 https://developers.google.com/protocol-buffers/docs/proto3#scalar),但我不明白为什么int32和sint32以相同的方式映射。它们实际上映射到 ::google::p rotobuf::int32,所以最终没有区别,是吗?
谢谢。
内存表示形式相同,但编码不同。 int32 使用 varint,sint32 使用 zig-zag varint。 因为 varint 对负整数是出了名的坏事。
例如
memory value -> encoded value
int32 5 -> varint 5
int32 -5 -> varint -5
sint32 5 -> varint 10
sint32 -5 -> varint 9
阅读更多:https://developers.google.com/protocol-buffers/docs/encoding
相关文章:
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 准确了解对象在内存中的映射方式
- STL映射比较器能否以某种方式获取指向映射本身的指针?
- EIGEN地图类:将C阵列映射到VectorXD指针以有效的方式
- 一维数组映射方式的性能差异问题
- 自动热键:重新映射 MS Visio 的快捷方式,以将手动选择的对象对齐到顶部(好像按:"AlignTop")
- 使用按插入方式排序的参数创建哈希映射
- 协议缓冲区 - 为什么 int32 和 sint32 以相同的方式映射
- 将映射从字符串到INT的最佳方法,而另一个同时进行的方式
- 我插入 STL 映射的方式是否正确?不会漏内存吗?
- 映射/联接两个自动生成的枚举的最佳方式
- 运算符 [] 和 insert() 函数在 C++ 映射中的行为方式不应该相同吗?
- 为什么这两种访问C++映射对部分的方式不同
- 如何以类似于C函数的方式将dlsym映射到非静态C++成员函数
- 有没有一种优雅的方式来表示C++中包含不同类型的映射
- 在映射中使用reference-to-lambda作为比较器(正确的方式?)
- 存储内部排序映射元素的最快方式
- 在内存映射文件中交换字节的有效方式
- 以原子方式访问存储在映射中的资源
- 以与数组相同的方式在映射上循环