Protobuf:C++字符串,里面有空字符

Protobuf : C++ string with null characters inside

本文关键字:字符 C++ 字符串 Protobuf      更新时间:2023-10-16

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

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

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

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

string s("namefirst", 10);

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

string s;
s.append("namefirst", 10);

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