2012-07-13 56 views
13

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

+0

你所说的“字符串变量”是什么意思?这是'char *'吗?是C,Java还是其他? – 2012-07-13 09:21:06

+1

@Marcelo我猜他的意思是'字符串'从''...... – 2012-07-13 09:22:24

+1

我不再是一个C++人,但我的印象是'\ 0'在C++字符串中没有特别的意义* *除非你使用专门处理'\ 0'的方法。所以...只是不使用这些方法? – 2012-07-13 09:23:30

回答

12

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

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

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

pb.set_foo(data, data_length); 
+0

参见https://stackoverflow.com/questions/2845769/can-a-stdstring-contain-embedded-nulls – Raedwald 2017-11-23 22:42:38