1

您可能知道,0xFFFFFFFF在二进制补码表示中等于-1(对于 32 位)。但是下面的代码:

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

打印0。下面的代码:

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

打印-1

为什么是这样?

4

2 回答 2

5

如果您阅读文档,您会看到toInt“如果转换失败,则返回 0”。

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

您可以使用ok-parameter 来验证这一点:

bool ok;
qint32 aa = QString("FFFFFFFF").toInt(&ok, 16);
if (ok) qDebug() << aa;
else qDebug() << "Conversion failed!";
于 2013-07-14T10:50:20.743 回答
2

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

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

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

于 2013-07-14T10:56:53.543 回答