C ++将字符串转换为ASCII表示形式

时间:2017-05-26 08:47:52

标签: c++

我正在编写一个简单的数据包解析器。为了测试,我已经按照以下格式准备了数据:

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

我真的错过了或误解了什么......

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()可能不会像您期望的那样运行。