我有一个用于字节码的字符数组。将它们一一打印出来应该会产生与您在此处看到的相同的十六进制值:
char toWrite[] = {'\x50','\x48','\xB8','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\xFF','\xE0' };
但是,当我尝试循环打印这些值时,它们被破坏了。我看到的是:
50 48 ffffffb8 00 00 00 00 00 00 00 ffffffff ffffffe0
为什么这些字符打印错了?我在 foreach 循环中迭代,每个元素都传递给
cout << hex << (int)currentChar << endl;
最佳答案
对于大多数系统,char
是 8 位宽,是有符号整数类型。存储 \xB8
将使其最高有效位为 1,这将使它为负。并将其转换为 int
也会导致负值,如果 int
为 32 位宽,则会导致 0xffffffb8
。
你应该使用unsigned char
:
unsigned char toWrite[] = {/*...*/};
此外,static_cast
比 C 风格的转换更可取:
cout << hex << static_cast<int>(currentChar) << endl;
关于c++ - char 数组未正确初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42335022/