我有一个文本文件,每行有一个十六进制值.就像是
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等效填充数组.
这有效:
#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)
注:我不得不类型更改a到unsigned int,因为它是溢出的int,从而导致循环失败.
80000000:
Run Code Online (Sandbox Code Playgroud)
作为十六进制值,它设置32位值的最高位.在我的系统上哪个溢出了一个int(我的系统上的sizeof(int)== 4).这会将流设置为错误状态,并且无法进一步读取.在OP循环中,这将导致无限循环,因为从未设置EOF; 在上面的循环中,它永远不会进入主体,代码将退出.