char数组未正确初始化

时间:2017-02-20 01:16:37

标签: c++ arrays char

我有用于字节码的字符数组。逐个打印它们应该产生与您在此处看到的相同的十六进制值:

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;

1 个答案:

答案 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;