Protocol buffers protobuf中有一个字节类型吗?

Protocol buffers protobuf中有一个字节类型吗?,protocol-buffers,Protocol Buffers,我找不到proto中是否可能有char/byte类型 我可以在这里看到各种类型: 但是我在那里找不到字节类型,甚至找不到int16类型。不,没有固定的1字节类型。固定长度仅具有4字节和8字节变体。大多数其他数值被编码为“varint”,其长度取决于大小(和符号,但“之字形”在其中起作用)。因此,您可以在一个字节中存储值为0-127的字节,在两个字节中存储值为128-255的字节。16位值将占用1到3字节,具体取决于大小(以及符号/锯齿形等) 对于倍数,8位版本有“字节”,其余版本有“压缩

我找不到proto中是否可能有char/byte类型

我可以在这里看到各种类型:


但是我在那里找不到字节类型,甚至找不到int16类型。

不,没有固定的1字节类型。固定长度仅具有4字节和8字节变体。大多数其他数值被编码为“varint”,其长度取决于大小(和符号,但“之字形”在其中起作用)。因此,您可以在一个字节中存储值为0-127的字节,在两个字节中存储值为128-255的字节。16位值将占用1到3字节,具体取决于大小(以及符号/锯齿形等)


对于倍数,8位版本有“字节”,其余版本有“压缩”;这避免了每个值使用字段头的成本。

非固定整数类型使用可变长度编码,因此您可能会对16位和8位整数使用
int32
,并让可变长度编码部分注意不发送您不使用的字节。@muistooshort IMHO您的注释应被接受。仅适用于锯齿形用于sint变体。正常的int变量,如int32,将使用10个字节来表示负值。IMHO可能128~16384全部占用2个字节,而不是128~255?@ch271828n我明确地说的是值为128~255的字节(即8位范围的最后一半),但实际上您最多可以存储16383个字节(而不是16384个字节)在2个字节的变量中-即14个数据位和2个打包bits@MarcGravell非常感谢!