首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么am设置在奇怪的模式下存储浮点数,缺少什么?

为什么am设置在奇怪的模式下存储浮点数,缺少什么?
EN

Stack Overflow用户
提问于 2019-03-07 13:12:13
回答 1查看 708关注 0票数 2

我正在尝试创建一个设置文件,如:

图weight=3.154 ui color=#00FFC1

但我得到的是

图weight=@Variant(\0\0\\x87@]/\x1b ui color=#00FFC1

我的代码很简单,看起来

代码语言:javascript
运行
复制
QSettings settings("foo.ini", QSettings::IniFormat);
settings.beginGroup("graph");
settings.setValue("weight", 3.456f);
settings.endGroup();
settings.beginGroup("ui");
settings.setValue("color", "#00FFC1");
settings.endGroup();
settings.sync();

qt5.7.1用于linux 64位

EN

Stack Overflow用户

发布于 2019-03-07 13:32:25

你并没有错过任何东西。你看到的只是Qt是如何编码INI的。由于没有标准描述某些类型应该如何在INI中表示,所以Qt定义了它们自己的类型。有关更多详细信息,请参阅https://doc.qt.io/qt-5/qsettings.html#Format-enum。简而言之,任何“特殊”类型都是由@<typename>(<data>)表示的,其中大多数被进一步编码为QVariant,您看到的数据就是@Variant(<metaTypeId><data>)。浮点数的元类型id是8,或者\0\0\0\x8编码为32位十六进制字符串.这4个字符之后的所有内容都是实际的二进制数据,就像QDataStream::operator<<会生成的那样。但是,为了使INI-文件至少与其他应用程序编写的文件具有一定的可读性和兼容性,某些类型(如QStringintdoublebool、.)使用另一种更常见的表示形式。

对于这个具体的情况,他们决定不为float类型编写这样的编码异常。我不知道确切的原因,但我个人的猜测是,他们想要区分INI-Files中的双倍和浮点数之间的区别,这样就不会有人意外地将浮点数解释为双倍(因此假设给定的数字具有双精度,尽管它没有)。

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55044655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档