1

在我的项目中,我有一个带有十六进制值的 QString (Big Endian)

QString hex_in("413DF3EBA463B0");

如何将 hex_in 转换为圆角双精度数?IEEE 754(https://en.wikipedia.org/wiki/Double_precision_floating-point_format

34.5

用户将编辑双精度,然后我的程序需要将其转换回十六进制。

谢谢你的时间 :)

4

2 回答 2

5

实际上只有一种方法可以做到这一点,那就是将字符串转换为整数,将其放入union设置整数成员并读出double成员的位置。

对于字符串转换,您可以使用例如这些函数之一


示例代码:

double hexstr2double(const std::string& hexstr)
{
    union
    {
        long long i;
        double    d;
    } value;

    value.i = std::stoll(hexstr, nullptr, 16);

    return value.d;
}

// ...

std::cout << "413DF3EBA463B0 = " << hexstr2double("413DF3EBA463B0") << '\n';

上面代码的输出将是

413DF3EBA463B0 = 1.91824e-307
于 2013-09-21T22:46:14.910 回答
0
    double HexToDouble(AnsiString str)
{
  double hx ;
  int nn,r;
  char * ch = str.c_str();
  char * p,pp;
  for (int i = 1; i <= str.Length(); i++)
  {
    r = str.Length() - i;
    pp =   ch[r];
    nn = strtoul(&pp, &p, 16 );
    hx = hx + nn * pow(16 , i-1);
   }
  return hx;
}

我的大十六进制数字功能

结果

72850ccbb88c6226afed9d8d971c8938        -->     1.5222282653101E+38     
000015d85a903c72b6bebdd18fb26811        -->     4.4307191280143E+32
于 2013-10-27T07:35:50.810 回答