在Protocol Buffers中,有几种int类型。例如,对于32位int,有int32,sint32和uint32。
在文档中解释了差异(参见https://developers.google.com/protocol-buffers/docs/proto3#scalar),但我不明白为什么int32和sint32以相同的方式映射。它们实际上映射到:: google :: protobuf :: int32,所以最后没有区别,是吗?
谢谢。
答案 0 :(得分:4)
内存表示相同,但编码不同。 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