从fstream读取十六进制值到int

AMM*_*AMM 1 c++ fstream

我有一个文本文件,每行有一个十六进制值.就像是

80000000
08000000
0a000000
Run Code Online (Sandbox Code Playgroud)

现在我正在编写一个c ++代码来直接阅读.就像是

fstream f(filename, ios::in);

while(!f.eof)
{
    int x;
    char ch;
    f>>std::hex>>x>>ch;  // The intention of having ch is to read the '\n'
}
Run Code Online (Sandbox Code Playgroud)

现在这没有按预期工作.虽然有些数字正在填充,但ch逻辑存在缺陷.任何人都可以告诉我正确的方法.我基本上需要使用int等效填充数组.

Mar*_*ork 5

这有效:

#include <iostream>
#include <fstream>

int main()
{
    std::ifstream f("AAPlop");

    unsigned int a;
    while(f >> std::hex >> a)   /// Notice how the loop is done.
    {
        std::cout << "I("<<a<<")\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

注:我不得不类型更改aunsigned int,因为它是溢出的int,从而导致循环失败.

80000000:
Run Code Online (Sandbox Code Playgroud)

作为十六进制值,它设置32位值的最高位.在我的系统上哪个溢出了一个int(我的系统上的sizeof(int)== 4).这会将流设置为错误状态,并且无法进一步读取.在OP循环中,这将导致无限循环,因为从未设置EOF; 在上面的循环中,它永远不会进入主体,代码将退出.