Protobuf中是否有一字节类型?

31

10
非固定整数类型使用可变长度编码,因此,假设您要在16位和8位整数上使用int32,并让可变长度编码部分负责不发送未使用的字节。 - mu is too short
1
@muistooshort IMHO 你的评论应该被接受为答案。 - omikron
1个回答

31

不,没有固定的1字节类型。固定长度只有4和8字节的变体。大多数其他数字值都被编码为"varint",这取决于大小(以及符号,但这里涉及到“zigzag”)。因此,您可以将值为0-127的字节存储在一个字节中,128-255的字节存储在两个字节中。16位值将根据大小(以及符号/ zigzag等)需要1至3个字节。

对于多个值,8位版本使用"bytes",其余版本使用"packed"; 这避免了每个值的字段标头成本。


Zigzag 只适用于 sint 类型变量。普通的 int 类型变量,如 int32,在表示负数时将使用 10 个字节。 - arviman
在我看来,也许12816384都只占用2个字节,而不是128255? - ch271828n
@ch271828n,我明确地在谈论值为128-255(即8位范围的后半部分)的字节,但实际上你可以在2个varint字节中存储多达16383(而不是16384)-即14个数据位和2个封装位。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接