2016-11-20 86 views

回答

1

QByteArraychar的数组。显然,您的平台上的char已签名且宽度为8位。因此,你的问题可以被蒸馏以:

char c = 0x80; 
quint32 = c << 8; 

的标准授权:

N4606§4.8 [conv.integral]/3

如果目标类型有符号,则该值如果它可以是在目的地类型中表示的 ;否则,值为 实现定义。

在这种情况下(如常2的补码系统),0x80被映射到std::numeric_limits<char>::min() == -128,因为它们共享相同的底层的比特模式是合乎逻辑的。

现在,-128 << 8定义为-128 * 2 ,即-32768。

最后,从-32768 32位无符号整数的转换被很好地定义和产量4294934528

+0

我最终使用'QDataStream'用于转换。如果有人感兴趣。 – Barracuda

相关问题