![](/img/trans.png)
[英]std::stod throws out_of_range error for a string that should be valid
[英]Converting String to Hex Throws Error: 'std::out_of_range'
我有一個非常簡單的程序,可以將十六進制字符串轉換為其 int 值。 代碼看起來不錯,但會引發運行時錯誤:
在拋出 '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;
}
我試過閱讀這樣的幾頁。 我仍然找不到與我的問題相關的任何內容。 導致此錯誤的我做錯了什么?
如果值不在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]
將以這種方式打印出來,作為帶負號的簽名 integer。所以這似乎不是你想要的。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.