Converting String to Hex Throws Error: 'std::out_of_range'
Converting String to Hex Throws Error: 'std::out_of_range'
我有一个非常简单的程序,可以将十六进制字符串转换为其 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。我仍然找不到与我的问题相关的任何内容。我做错了什么导致了这个错误?
如果值不在 int
可以表示的范围内,stoi
将抛出 out_of_range
。数字 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]
和 <<
将以这种方式打印出来,作为带负号的有符号整数。所以这似乎不是你想要的。)
我有一个非常简单的程序,可以将十六进制字符串转换为其 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。我仍然找不到与我的问题相关的任何内容。我做错了什么导致了这个错误?
int
可以表示的范围内,stoi
将抛出 out_of_range
。数字 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]
和 <<
将以这种方式打印出来,作为带负号的有符号整数。所以这似乎不是你想要的。)