我在字节中有一个表示双数字的字符串。这是十六进制格式:
char buffer[17] = "4053E60C49BA5E35";
在双倍中,正确的值是:21,898625。我需要一种简单的方法来将此字符串转换为double。刚才工作的唯一方法就是这个,但我不确定这是最好的方法:
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;
}
谢谢
您可以使用reinterpret_cast而不是union。此外,您提供的值在网站上有所不同,可以从十六进制转换为双倍: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;
}