可能重复:
为什么在读取 eof 时设置故障位?有出路吗?
我正在编写一个小程序,它在 Mac OS 和 Ubuntu (Unix ...) 上运行良好。程序必须读取数据文件并将字节(char
s / unsigned char
s)和memcpy()
它们分离成浮点数。这将包括获取以下四个值的过程,读取并将它们左移到 32 位int
,然后将int
s 内存复制到float
. 像这样:
0x43 0x66 0x1A 0x79 -> 将 int32 和 memcpy() 读入 float -> val = 230.103
正如我所说,这适用于 Unix,但 Windows 似乎将其解释char
0x1A
为文件结尾 (EOF) 错误并停止读取数据。为什么 Windows 做这样的事情而不是 Unix?我怎么能把它关掉?
我什至通过查看ifstream
自身并检查是否设置了 EOL 标志来尝试错误处理。然后我会clear()
'ifstream
的错误标志并继续阅读(使用get()
),但该死的东西总是返回相同的 EOF /0x1A
字符并且不会读取下一个字符。
编辑:添加了一些代码
ifstream input (PATH, ios::in);
if (input.is_open()) {
unsigned int counter = 0;
while (input.good()) {
BYTE byte;
byte = input.get();
printf("%i, ", byte);
counter++;
}
printf("\r%i, ", counter);
input.close();
} else {
printf("Can't open file!");
}
很感谢任何形式的帮助。
最大限度