gpt4 book ai didi

c++ - 将字符串转换为十六进制会引发错误 : 'std::out_of_range'

转载 作者:行者123 更新时间:2023-12-04 07:16:56 25 4
gpt4 key购买 nike

我有一个非常简单的程序,可以将十六进制字符串转换为它的 int 值。代码看起来不错,但会引发运行时错误:

terminate called after throwing an instance of 'std::out_of_range'what(): stoi


这是导致错误的代码:
int dump[4];
string hexCodes[4] = {"fffc0000", "ff0cd044", "ff0000fc", "ff000000"};
for (int i = 0; i < 4; i++)
{
dump[i] = 0;
dump[i] = stoi(hexCodes[i], 0, 16);
cout << dump[i] << endl;
}
我曾尝试阅读几页,例如 this .我仍然找不到与我的问题相关的任何内容。我做错了什么导致这个错误?

最佳答案

stoi会抛出out_of_range如果该值不在 int 的范围内可以代表。号码0xfffc0000 (4294705152) 不在 32 位 int 的范围内因为它大于 2^31-1 (2147483647)。所以抛出异常正是它必须做的。unsigned会工作,但没有 stou ,所以使用 stoul .然后你可能想使用 unsigned dump[4]因为您知道该值可以用 unsigned int 表示. (同样,只要它们在您的系统上是 32 位。uint32_t 可能更安全。)作为奖励,这将确保 cout << dump[i]打印出来 4294705152如预期的。
(如果您切换到 stoul 但将 dump 保留为 int 的数组,则该值将通过赋值转换为 int。在 C++20 下,对于早期 C++ 标准下的大多数常见系统,转换将“环绕”到 -262144 ,并输出 dump[i]<< 将这样打印出来,作为带负号的有符号整数。所以这似乎不是你想要的。 )

关于c++ - 将字符串转换为十六进制会引发错误 : 'std::out_of_range' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68705120/

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