2015-09-14 87 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

相关问题