我正在编写一个简单的数据包解析器。为了测试,我已经按照以下格式准备了数据:
std::string input = "0903000000330001 ... ";
我需要把它转换成像这样的东西
0x09 0x03 0x00 0x00 ...
你能帮我解释一下我应该如何构建新字符串吗?
我已经尝试过这些......
std::string newInput = "\x09\x03\x00 ... ";
std::string newInput = "\u0009\u0003\u0000 ...";
但是程序返回该字符串的大小只有两个。
std::cout << newInput.size() << std::endl;
> 2
我真的错过了或误解了什么......
答案 0 :(得分:6)
std::string
可以保存带有嵌入的nul字符的字符串,但是你必须在构造函数中告诉它的长度:
std::string NewInput("\x09\x03\x00 ... ", number_of_characters);
否则,std::string
将使用strlen
计算长度,并停在\x00
。
答案 1 :(得分:1)
C中的字符串,在某种程度上也在C ++中,以null字符终止。因此,如果遇到'\x00'
(又名'\0'
)字符,则将其视为字符串的结尾。如果您主要对每个字符的数值感兴趣,则可能需要使用std::vector<uint8_t>
或类似字符。 std::string
可以处理空字符(您需要使用具有显式长度的函数重载),但是例如c_str()
可能不会像您期望的那样运行。