在协议缓冲区中,有几种int类型。例如,对于32位int,有int32、sint32和uint32。
在文档中解释了不同之处(请参阅https://developers.google.com/protocol-buffers/docs/proto3#scalar),但我不明白为什么int32和sint32以相同的方式映射。它们实际上被映射到::google::protobuf::is 32,所以最终没有区别,是吗?
谢谢。
发布于 2017-01-11 09:29:14
内存表示是相同的,但编码是不同的。int32使用varint,sint32使用。作为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
https://stackoverflow.com/questions/41586887
复制相似问题