QString :: toLongLong()无法处理大十六进制数

时间:2015-03-02 13:47:15

标签: c++ qt

Qt 5.4.1,Linux 64位。示例代码:

int main(int argc, char** argv)
{
    QString a = "FFFFFFFFFFFFFFFF";
    bool ok;
    qDebug() << a.toLongLong(&ok, 16);
    qDebug() << ok;
    return 0;
}

应显示:

-1
true

但显示:

0
false

适用于较小的数字。 为什么这么奇怪?我做错了吗?

2 个答案:

答案 0 :(得分:2)

实际上,可以处理long long的最大值是2^63 - 1,因为它已签名。你在这里得到的是2^64 - 1。这就是为什么它无法解析它。

您应该尝试使用QString::toULongLong

答案 1 :(得分:0)

如果你试试     a.toULongLong(&ok, 16);然后结果是:

18446744073709551615

是真的

查看限制http://en.wikipedia.org/wiki/C_data_types#limits.h