从十六进制字符串转换为 int 时出现 C++ 错误

c++ error when converting from hex string to int

我正在编写一个接受十六进制值文本文件的程序。我将这些十六进制值存储在 vector<string> 中,然后使用 stol 将十六进制字符串转换为整数,然后将其存储在新的 vector<int>.

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;
}

该程序原本可以运行;但今天由于某种原因它似乎没有正确转换一些新的十六进制值。以下是需要转换的十六进制值的一小段:

这些是程序应该将它们转换成的值:

然而,当我 运行 我的程序将十六进制值转换为大的负数时,它会崩溃。有谁知道是什么导致程序无法正确转换十六进制数字然后崩溃?

您的程序继续正常运行,只是您尝试读取的添加的十六进制数是负 32 位整数的表示。例如,A4B844A2 的最高有效字节是 10100100。它在最重要的"sign"位中有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;
}