我正在使用数组的字节,并试图更好地理解在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个字节,这个输出背后的规则是什么。
感谢。