簡體   English   中英

將字符串轉換為十六進制拋出錯誤:'std::out_of_range'

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM