9

由于我没有得到关于这个问题的答案,我必须制作原型并检查自己,因为我的数据集标题需要固定大小,所以我需要固定大小的字符串。那么,是否可以在协议缓冲区中指定固定大小的字符串或字节数组?这在这里并不明显,我对将固定大小的字符串强制放入标题消息感到有点难过。——即,std::string('\0', 128);

如果不是,我宁愿使用#pragma pack(1) struct header {...};'

编辑

问题在这里间接回答。会回答,除了

4

2 回答 2

6

protobuf 在协议中没有这样的概念,在 .proto 模式语言中也没有。在字符串和 blob 中,数据在技术上始终是使用长度前缀的可变长度(其本身使用 varint 编码,因此即使长度也是可变长度)。

当然,如果您只存储特定长度的数据,那么它会排成一行。另请注意,由于 protobuf 中的字符串是使用 UTF-8 编码的 unicode,因此编码数据的长度并不像字符数那么简单(除非您只使用 ASCII 字符)。

于 2012-04-10T16:04:49.627 回答
2

这是对先前答案的轻微澄清。Protocol Buffers 不字符串编码为 UTF-8,而是将它们编码为常规字节。在线格式将是消耗的字节数,后跟实际字节数。请参阅https://developers.google.com/protocol-buffers/docs/encoding/

虽然在线格式始终相同,但协议缓冲区提供了两个接口供开发人员使用,字符串和字节,主要区别在于前者通常会尝试向开发人员提供字符串类型,而后者会尝试提供提供字节类型(即Java会为字符串提供String,为字节提供ByteArray)。

于 2013-07-10T23:47:45.810 回答