如果我做以下操作:
ifstream file;
file.open("somefile", ios::binary);
unsigned int data;
file >> data;
我的流(stream)将始终设置 failbit
,并且 data
将保持未初始化状态。 然而,如果我读取一个 char
或 unsigned char
,则流就没问题了。 perror()
告诉我“result too large”。
我在 Google 上唯一看到的建议是不应该使用 operator>>
用于二进制数据(最好使用 read()
),但我发现这个操作符更清晰、更易于使用,并且不需要对所有内容进行强制转换。
有人能解释一下这个问题吗?
<iostreams>
的代码是可移植的,而你的提议则不是。 - Calethios::binary
(和ios::text
)的作用。一些平台在处理带有行结束字符的文件时区分“文本模式”和“二进制模式”。ios
标志仅处理此类情况。 - Caleth