c++ - char 数组未正确初始化

标签 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;

最佳答案

对于大多数系统,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/

相关文章:

c++ - MPI 收集/减少操作困惑?

c++ - 通过字符串进行最优迭代

c - 在 C 中,如何打印出一个字符数组然后清空它?

PHP数组到MYSQL数据库?

c - 使用指针定位字符串中最后一次出现的char(C语言)

c++ - 如何在linux上制作透明窗口

c++ - 在 C++ API 中将一个张量的一大块复制到另一个张量中

c++ - 如何在保持文档打开的同时关闭 MFC CVIEW

arrays - 属性在类型上不存在/不能用作索引类型

javascript - 为什么 push 方法比在 Javascript 中通过数组索引放置值要慢得多