1

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

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

4

2 回答 2

4

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

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

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

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

string s;
s.append("name\0first", 10);
于 2015-02-28T04:19:21.683 回答
3

使用接受字符数的构造函数std::string s(buffer, nChars)。这是该参考文献中的第五个。

于 2015-02-27T22:51:38.667 回答