Protobuf:内部带有空字符的C ++字符串

时间:2015-02-27 22:48:34

标签: c++ protobuf-c

我正在处理内存中的缓冲区,它被读作protobuf。我需要反序列化它。此protobuf的内容包含一个字符串,该字符串在字符串中可能有也可能没有null字符。例如,字符串可以是这样的:" name \ 0first"。如果我有这样的输入,我可以反序列化的字符串总是看起来像" name"因为字符串类在空字符后删除了部分。

在这种情况下如何访问完整的字符串?在这种情况下,字符串长度函数显然没有帮助。

2 个答案:

答案 0 :(得分:2)

使用带有字符数std::string s(buffer, nChars)的构造函数。这是reference中的第五个。

答案 1 :(得分:1)

首先,您需要适当地构造字符串。您无法使用寻找NULL终止符的构造函数构造它,这是string(const char *)正在寻找的内容。

您必须使用带有指针和长度的构造函数。

string s("name\0first", 10);

如果您已经构造了一个字符串,并且想要附加嵌入了NULL的数据,则可以使用append()方法。

string s;
s.append("name\0first", 10);