我需要将c ++字符串复制到char数组中,然后对其进行解码。 char数组不需要以null终止。由于编码的性质,许多字符是不寻常的,有些字符是不可打印的,这会引起问题。
这是C ++字符串打印为:
std::cout << myString;
输出:
mw\22ypwr\`himg 0few1nvnl
通过执行以下操作将其转换为char []
:
char * m = new char[myString.size() + 1];
strcpy(m, myString.c_str());
m*
的长度为24,并且不正确。无法正确解码。以下char []
可以正确解码:
char m2 [] = "mw\22ypwr`himg 0few1nvnl";
注意,这是通过复制字符串的输出创建的。但是,此C字符串的长度仅为22,而不是24。此外,打印它的结果如下:
std::cout << m;
输出:
mwypwr`himg 0few1nvnl
注意\22
不见了。但是,这并不像在将字符串转换为char[]
之前从字符串中删除字符串那样简单。遍历ASCII值表明存在一个字符,该字符的十进制操作码为18
,以前是\22
。此字符不打印。
ASCII值作为十进制:
109 119 18 121 112 119 114 96 104 105 109 103 32 48 102 101 119 49 110 118 110 108
为什么\22
转换为ASCII字符18?如何从具有文字\22
的C ++字符串构造正确的,可解码的C字符串?我需要能够对一大堆可能未知的编码字符串执行此操作,因此我宁愿不要在不知道为什么会发生这种情况的情况下,用ASCII 18手动替换\22
。