为什么协议缓冲区字节是c ++中的字符串?

时间:2012-07-13 09:18:19

标签: c++ string byte protocol-buffers

协议缓冲区说它可以contain any arbitrary sequence of bytes。但是如果我的数据包含'\ 0',那么协议缓冲区如何从字符串变量中编码我的整个数据。

1 个答案:

答案 0 :(得分:15)

协议缓冲区的C ++实现将字节和字符串类型返回为std::string。这个结构包含一个长度函数,告诉你相应的数据有多长(以及数据本身。)因此,嵌入的\0字符没有特殊意义。

设置函数也接受字符串,或者有接受缓冲区和长度的版本。 如果你想设置一个字段,你可以这样做:

pb.set_foo( std::string( data, data_length ) );

pb.set_foo( data, data_length );