为什么是 QString("FFFFFFFF").toInt(0, 16);返回0?

问题描述 投票:0回答:2

您可能知道,补码表示中的

0xFFFFFFFF
等于
-1
(对于 32 位)。但是下面的代码:

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

打印

0
。代码如下:

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

打印

-1

这是为什么?

qt qstring twos-complement
2个回答
5
投票

如果您阅读文档,您可以看到

toInt
“如果转换失败,则返回0。”

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

您可以使用

ok
参数来验证这一点:

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

2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.