使用QSettings保存64位整数

时间:2013-09-24 06:39:16

标签: qt 64-bit int64 qvariant qsettings

是否有任何简洁的方法,将数字转换为QByteArray,以quint64保存QSettings?问题是QVariant不接受qint64quint64

3 个答案:

答案 0 :(得分:10)

QVariant支持qlonglongqulonglong。正如文档所述,这些与qint64quint64相同。因此,您只需使用QVariant::QVariant(qlonglong)QVariant::toLongLong

答案 1 :(得分:1)

如果将qint64存储为字符串,该怎么办? QString支持这种转换:QString::number(qlonglong n, int base),其中qlonglongqint64相同。 quint64也是如此 - 使用QString::number(qulonglong n, int base),其中qulonglongquint64相同。

QSettings settings("config.ini", QSettings::IniFormat);
[..]
qint64 largeNumber = Q_INT64_C(932838457459459);
settings.setValue("LargeNumber", QString::number(largeNumber));
[..]

答案 2 :(得分:0)

另一种解决方案是认识到IEEE 754双格式具有53位分数(不要忘记隐含的第53位!)和符号位。这允许您存储无符号的53位整数而不会丢失精度,或者签名54位整数。您可以存储以下内容:

  • 你的qint64的绝对值小于2 ^ 55,或
  • 你的quint64小于2 ^ 54。