从十六进制到双的转换始终导致内存位置的 std::out_of_range

Convertion from Hex to Dual leads always to std::out_of_range at memory location

本文关键字:std 位置 range out 内存 of 十六进制 转换      更新时间:2023-10-16

我正在编写一个将字符列表转换为双精度数字的 c++ 程序。所以基本上我将字符转换为十六进制数,然后使用此方法将十六进制转换为双精度

#include <cstdio>
double hexstr2double(const std::string& hexstr)
{
union
{
long long  i;
double    d;
} value;
value.i = std::stoll(hexstr, nullptr, 16);
return value.d;
}

十六进制是我想转换为双精度的十六进制数。我能够获得良好的转换结果,但只有当双精度数为正数时,如果它是负数,我总是有这个错误" Microsoft C++例外:内存位置的 std::out_of_range"

例如,"3fc87916804e22df"给出">

0.19119530930426884",但"bf9f9dca2676f181"给出"-9.2559631349317831e+61",这是一个错误的结果并导致错误

从文档中说:

异常


-std::out_of_range转换后的值是否超出结果类型的范围,或者如果基础函数(std::strtolstd::strtoll(将errno设置为ERANGE