将Hex转换为Double到Hex?

时间:2013-09-21 22:42:09

标签: c++ qt floating-point hex double

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

QString hex_in("413DF3EBA463B0");

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

34.5

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

感谢您的时间:)

2 个答案:

答案 0 :(得分:5)

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

对于字符串转换,您可以使用例如one of these functions


示例代码:

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

答案 1 :(得分: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