为什么选择QString(“FFFFFFFF”)。toInt(0,16);返回0?

时间:2013-07-14 10:36:33

标签: qt qstring twos-complement

如您所知,Two's Complement表示中的0xFFFFFFFF等于-1(对于32位)。但是以下代码:

qint32 aa = QString("FFFFFFFF").toInt(0, 16);
qDebug()<<aa;

打印0。以下代码:

qint32 aa = 0xffffffff;
qDebug()<<aa;

打印-1

为什么会这样?

2 个答案:

答案 0 :(得分:5)

如果您阅读the documentation,则可以看到toInt“如果转换失败,则返回0。”

您的输入不符合带符号的32位整数,因此可能转换失败。

您可以使用ok - 参数验证这一点:

bool ok;
qint32 aa = QString("FFFFFFFF").toInt(&ok, 16);
if (ok) qDebug() << aa;
else qDebug() << "Conversion failed!";

答案 1 :(得分:2)

FFFFFFFF不是整数格式。 0xFFFFFFFF是。并且0xFFFFFFFF也超出了int范围。尝试使用有符号整数。将转换函数toInt更改为toUInit。这是代码:

quint32 aa = QString("0xffffffff").toUInt(0, 16);
quint32 bb = 0xffffffff;
qDebug()<<aa;
qDebug()<<bb;

已在我的机器上测试过。输出为4294967295。