2015-09-14 39 views
2

我正在編寫一個接受十六進制值文本文件的程序。我將這些十六進制值存儲在vector<string>中,然後使用stol將十六進制字符串轉換爲整數,然後將其存儲在新的vector<int>中。從十六進制字符串轉換爲int時出現C++錯誤

vector<string> flir_times; 
vector<int> flir_dec; 

for(int i = 0; i < flir_times.size() ; i++){ 
    int x = stol(flir_times[i], nullptr, 16); 
    flir_dec.push_back(x); 
    cout << flir_dec[i] << endl; 
} 

該方案本來是工作;但今天出於某種原因,它似乎並沒有正確地轉換一些新的十六進制值。下面是需要轉換的十六進制值的一小段:

enter image description here

這些是該方案應把它們轉換成數值:

enter image description here

然而,當我運行我的程序將十六進制值轉換爲大負數,然後崩潰。有誰知道什麼可能導致程序不能正確地轉換十六進制數字然後崩潰?

+0

如果用來工作,你確認輸入文件之前具有相同的語法? –

+0

是的,早先在代碼中我得到用戶輸入的文本文件目錄,所以我肯定該文件是正確的 – oodan123

回答

4

程序繼續正常工作,它只是添加的十六進制數字,你試圖讀取的是負32位整數的表示。例如,A4B844A2的最高有效字節是10100100。它有1在最重要的「符號」位,所以這個數字實際上是負數。

切換到無符號數,並使用std::stoul解析輸入來解決這個問題:

vector<string> flir_times; 
vector<unsigned> flir_dec; 

for(int i = 0; i < flir_times.size() ; i++){ 
    unsigned x = stoul(flir_times[i], nullptr, 16); 
    flir_dec.push_back(x); 
    cout << flir_dec[i] << endl; 
} 
+0

是的,這工作正常,謝謝 – oodan123

+0

@TobySpeight你說得對,'std :: stoul'更合適。我忘了它的名字,並沒有在'std :: stol'的參考頁面上找到它。奇怪的是,cppreference在一個單獨的頁面上放置了無符號的函數。非常感謝你! – dasblinkenlight

相關問題