在C ++中从十六进制字符串转换为double

时间:2019-03-29 15:53:25

标签: c++ hex double

我有一个以字节为单位的字符串,代表一个双数。就像这样的十六进制格式:

char buffer[17] = "4053E60C49BA5E35";

加倍,正确的值是:21898625。 我需要一种简单的方法将该字符串转换为双精度。目前唯一可行的方法是这种方法,但我不确定这是否是最佳方法:

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

  try{
    value.i = std::stoll(hexstr, nullptr, 16);
  }
  catch(...){value.i=0;}

  return value.d;
}

谢谢

1 个答案:

答案 0 :(得分:-1)

您可以使用reinterpret_cast代替联合。 同样,您提供的值在网站上从十六进制转换为双精度的值也有所不同:https://gregstoll.com/~gregstoll/floattohex/

#include <iostream>

using namespace std;

double hexstr2double(const std::string& hexstr)
{
    double d = 0.0;

    try{
        *reinterpret_cast<unsigned long long*>(&d) = std::stoull(hexstr, nullptr, 16);
    }
    catch(...){}

    return d;
}

int main()
{
    char buffer[] = "4035e60c49ba5e35";
    cout<<sizeof(double)<<" "<<sizeof(unsigned long long)<<endl;
    cout<<hexstr2double(buffer);

    return 0;
}