我有用于字节码的字符数组。逐个打印它们应该产生与您在此处看到的相同的十六进制值:
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;
答案 0 :(得分:3)
对于大多数系统,char
是8位宽,是有符号整数类型。存储\xB8
将使其最重要的位1,这将使其为负。将其转换为int
也会产生负值,如果0xffffffb8
为32位宽,则会生成int
。
您应该使用unsigned char
:
unsigned char toWrite[] = {/*...*/};
此外,static_cast
比C式演员更优选:
cout << hex << static_cast<int>(currentChar) << endl;