gpt4 book ai didi

当传递表示负值的十六进制时,C++ stoll 抛出超出范围的异常

转载 作者:行者123 更新时间:2023-11-28 02:06:12 25 4
gpt4 key购买 nike

我正在使用 Visual Studio 2013,我正在尝试使用 stoll 将以十六进制格式表示负值的字符串 writen 转换为 long long,但我遇到了超出范围的异常。你知道为什么吗?

例如0xFFFFFFFFFFFFFA7E 十进制 -1410

示例代码:

std::string s = "0xFFFFFFFFFFFFFA7E";
size_t pos;
auto result = std::stoll(s, &pos, 16);

最佳答案

仅仅因为无符号算术(你在这里甚至没有使用它)环绕并不意味着 0xFFFFFFFFFFFFFA7E 是 -1410 十进制。不是。

这是一个(非常大的)正数,以任何基数计算:根据我的计算,18,446,744,073,709,550,000。

这不能由适用于有符号 64 位类型的函数处理,因为有符号 64 位类型的最大值为 9,223,372,036,854,775,807。

由于 size_t 是一个 unsigned 64 位类型,您需要读取一个只适合 unsigned 的值> 64 位类型,使用执行此操作的函数:strtoull .

关于当传递表示负值的十六进制时,C++ stoll 抛出超出范围的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37321805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com