协议缓冲区说它可以contain any arbitrary sequence of bytes。但是如果我的数据包含'\ 0',那么协议缓冲区如何从字符串变量中编码我的整个数据。
答案 0 :(得分:15)
协议缓冲区的C ++实现将字节和字符串类型返回为std::string
。这个结构包含一个长度函数,告诉你相应的数据有多长(以及数据本身。)因此,嵌入的\0
字符没有特殊意义。
设置函数也接受字符串,或者有接受缓冲区和长度的版本。 如果你想设置一个字段,你可以这样做:
pb.set_foo( std::string( data, data_length ) );
或
pb.set_foo( data, data_length );