【发布时间】:2014-05-05 07:34:33
【问题描述】:
在我的项目中,我将一个双变量读取为十六进制并将其加载到字符串中。
我需要将该十六进制字符串转换为双精度数。我目前使用这个:
double hexstr2double(const std::string& hexstr)
{
union
{
long long i;
double d;
} value;
value.i = std::stoll(hexstr, nullptr, 16);
return value.d;
}
当我这样做时:
qDebug() << hexstr2double("402540798D23092A");
输出为 10.6259。不准确,但我没问题。
然后用户可以将该号码编辑为他们想要的任何内容。如何将他们的数字转换回十六进制表示?
感谢您的宝贵时间。
【问题讨论】:
-
snprintf 与您工会的第 i 个成员的 %llx?
-
?对不起,我不明白你的评论。我只在 Qt 中编写过 C++
-
这在什么意义上不准确?
-
您还需要解决字节顺序问题。
-
@mc360pro 正如 David Hefferman 所指出的,我越来越担心字节顺序问题。这当然完全取决于十六进制字符串的目的是什么。上面的编码函数和下面的解码函数提供了双精度的 a 表示,但这种表示取决于硬件的字节顺序,它可能与内存表示不匹配(例如,按内存位置排序)。 . 只要您在同一台机器上进行编码和解码并且不对十六进制字符串进行任何进一步处理就可以了....但如果不是,您将面临问题。
标签: c++ floating-point hex double