Protobuf:内部包含空字符的 C++ 字符串
Protobuf : C++ string with null characters inside
我正在处理内存中的一个缓冲区,它被读取为 protobuf。我需要反序列化它。此 protobuf 的内容包含一个字符串,该字符串中可能包含也可能不包含空字符。例如,字符串可能是这样的:"name[=14=]first"。如果我有这样的输入,我可以反序列化的字符串总是看起来像 "name" 因为字符串 class 删除了空字符之后的部分。
在这种情况下如何访问完整的字符串?字符串长度函数在这种情况下显然无济于事。
使用接受字符数std::string s(buffer, nChars)
的构造函数。从这个reference.
第五个
首先,您需要适当地构造字符串。您不能使用正在寻找 NULL 终止符的构造函数来构造它,这正是 string(const char *)
正在寻找的。
您必须使用带有指针和长度的构造函数。
string s("name[=10=]first", 10);
如果您已经构建了一个字符串,并且想要附加嵌入了 NULL 的数据,您可以使用 append()
方法。
string s;
s.append("name[=11=]first", 10);
我正在处理内存中的一个缓冲区,它被读取为 protobuf。我需要反序列化它。此 protobuf 的内容包含一个字符串,该字符串中可能包含也可能不包含空字符。例如,字符串可能是这样的:"name[=14=]first"。如果我有这样的输入,我可以反序列化的字符串总是看起来像 "name" 因为字符串 class 删除了空字符之后的部分。
在这种情况下如何访问完整的字符串?字符串长度函数在这种情况下显然无济于事。
使用接受字符数std::string s(buffer, nChars)
的构造函数。从这个reference.
首先,您需要适当地构造字符串。您不能使用正在寻找 NULL 终止符的构造函数来构造它,这正是 string(const char *)
正在寻找的。
您必须使用带有指针和长度的构造函数。
string s("name[=10=]first", 10);
如果您已经构建了一个字符串,并且想要附加嵌入了 NULL 的数据,您可以使用 append()
方法。
string s;
s.append("name[=11=]first", 10);