2012-04-10 262 views
5

由于我没有得到关于this问题的答案我得到了原型并检查了我自己,因为我的数据集标题需要固定大小,所以我需要固定大小的字符串。那么,是否可以在协议缓冲区中指定固定大小的字符串或字节数组?这在这里并不显而易见,我有点不好意思将固定大小的字符串强制插入标题消息。 --i.e,std::string('\0', 128);协议缓冲区:无固定大小缓冲区的符号?

如果没有我宁愿使用一个#pragma pack(1) struct header {...};'

编辑

问题间接回答here。将回答并除外

回答

2

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

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

0

这是对上一个答案的一个细微的说明。 Protocol Buffers does not将字符串编码为UTF-8,它将它们编码为常规字节。线上格式将是消耗的字节数,随后是实际字节数。请参阅https://developers.google.com/protocol-buffers/docs/encoding/

虽然线上格式总是相同,但协议缓冲区为开发人员提供了两个接口,字符串和字节,主要区别在于前者通常会尝试向开发人员提供字符串类型,因为后者将尝试提供字节类型(即Java将为字符串提供字符串,为字节提供字节数组)。

+0

UTF-8是Unicode的编码 - 它将Unicode字符转换为字节。 Protobuf使用UTF-8获取常规字节。 – solidsnack 2014-01-21 19:51:04

+0

@snack可否请您仔细重读第一个文件。 – Claris 2014-01-21 21:35:16