使用QSettings保存64位整数

3

除了将数字转换为 QByteArray,还有没有简便的方法可以使用 QSettings 保存 quint64?问题在于 QVariant 不接受 qint64quint64

3个回答

11

QVariant支持qlonglongqulonglong。根据文档,它们与qint64quint64相同。因此,您可以直接使用QVariant::QVariant(qlonglong)QVariant::toLongLong


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));
[..]

1
还有一个接受qlonglong的QVariant构造函数。 - Frank Osterfeld

0

另一种解决方案是意识到IEEE 754双精度格式具有53位小数(不要忘记隐式的第53位!)和一个符号位。这使您可以存储无损精度的无符号53位整数或有符号54位整数。您可以存储以下内容:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接