从十六进制到双的转换始终导致内存位置的 std::out_of_range
Convertion from Hex to Dual leads always to std::out_of_range at memory location
我正在编写一个将字符列表转换为双精度数字的 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::strtol
或std::strtoll
(将errno
设置为ERANGE
。
相关文章:
- 确保编译时的特定 std::array 位置
- 标记为 std::memory_order_seq_cst 的单个原子操作是否会在所有位置触发顺序一致性?
- 内存位置出现Microsoft C++异常:std::out_of_range
- 从十六进制到双的转换始终导致内存位置的 std::out_of_range
- 移动 std::bitset<N> 是否超过 N 个位置未定义的行为?
- 错误:内存位置的 std::length_error
- 在不同的内存位置同时写入 std::d eque 是否线程安全?
- 查找 std::integer_sequence 中首次出现的值的位置
- 只读位置'__result.std::_Rb_tree_const_iterator<_Tp>::operator*<long long int>()'分配错误
- C 获取std :: out_of_range异常的位置
- C++ std::map 如何按索引位置访问密钥
- 如何使用行位置在std :: ifstream中导航
- C++例外:内存位置 0x003DF4C0 处的 std::out_of_range
- 访问 std::string 中的元素,其中字符串的位置大于其大小
- 如何使用 std::find 找到元素的所有位置?
- 有没有一种方法可以在std::向量的特定位置重复插入元素
- 获取设置故障位的流位置 / std::ios::抛出故障
- std::ostringstream将标志放在错误的位置
- C++命名空间std的定义方式/位置(文档/标准链接)
- 如何使用regex_token_iterator<std::string::iterator>通过迭代器本身获取子匹配的原始字符串的位置?