23

协议缓冲区说它可以包含任意字节序列。但是如果我的数据包含 '\0' ,协议缓冲区如何从字符串变量中编码我的整个数据。

4

1 回答 1

30

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

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

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

或者

pb.set_foo( data, data_length );
于 2012-07-13T09:25:59.447 回答