char到int转换机制

时间:2017-12-08 14:17:12

标签: c++ c

我正在使用数组的字节,并试图更好地理解在char到int转换期间发生的事情。

以下是代码:

#include <QDebug>

int main(int argc, char *argv[])
{
      Q_UNUSED(argc);
      Q_UNUSED(argv);

      char val = 0xff; // 1111 1111

      int a = val;

      unsigned int b = val;

      qInfo() << "size of int is " << sizeof(int);

      qInfo() << a << " " << b << " " << 0xff ;
      qInfo() << QString("0x%1 0x%2 0x%3").arg(a, 16, 16, QChar('0')).arg(b, 16, 16, QChar('0')).arg(0xff, 16, 16, QChar('0'));

      return 0;

}

和输出:

size of int is  4
-1   4294967295   255
"0xffffffffffffffff 0x00000000ffffffff 0x00000000000000ff"

由于我的char值为1111 1111b,我预计 - 但我错了 - 转换将填充我的4个字节的数组,其中0x0 0x0 0x0 0xff(假设字节是BigEndian,但这里没关系因为似乎是像0xff这样的数字文字。

我知道0xff可以解释为十进制的255或-1(无符号或有符号整数,第一位用于符号),但我仍然不太了解提供此输出的机制。

编辑: 正如在评论中指出的那样,我想理解从一个字节“扩展”到有符号char值的4个字节的机制。我不问为什么我的平台上的char类型是有符号或无符号的,但是如何构建剩余的3个字节,这个输出背后的规则是什么。

感谢。

0 个答案:

没有答案