Protobuf:C++字符串,里面有空字符
Protobuf : C++ string with null characters inside
我正在处理内存中的一个缓冲区,该缓冲区被读取为protobuf。我需要对它进行反序列化。这个protobuf的内容包含一个字符串,该字符串内部可能有null字符,也可能没有null字符。例如,字符串可以是这样的:"name\0first"。如果我有这样的输入,我可以反序列化的字符串看起来总是像"name",因为字符串类会删除null字符后面的部分。
在这种情况下,我如何访问完整的字符串?字符串长度函数在这种情况下显然没有帮助。
首先,您需要适当地构造字符串。不能使用正在查找NULL终结符的构造函数来构造它,而string(const char *)
正在查找NULL终止符。
你必须使用一个带有指针和长度的构造函数。
string s("name first", 10);
如果您已经构造了一个字符串,并且希望附加嵌入NULL的数据,则可以使用append()
方法。
string s;
s.append("name first", 10);
使用接受字符数std::string s(buffer, nChars)
的构造函数。这是本参考文献的第五篇。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存