如果我执行以下操作:
ifstream file;
file.open("somefile", ios::binary);
unsigned int data;
file >> data;
我的流将始终设置 failbit
并且 data
将保持未初始化状态。但是,如果我改为读取 char
或 unsigned char
,则流很好。 perror()
告诉我“结果太大”。
我在 Google 上看到的唯一内容是一个建议说 operator>>
不应该用于二进制数据(更喜欢 read()
),但我发现操作符更干净,更易于使用——并且不需要强制转换所有内容。
谁能解释一下这个问题?
最佳答案
iostream extraction operator (>>)尝试解释由空格分隔的数字字符串,而不是二进制数据。有许多不同的方法可以对二进制形式的无符号整数进行编码(例如,2's complement representation 中的 32 位 little-endian byte order )。这就是为什么你必须使用 read/write对此类二进制缓冲区进行操作的函数。
但是,没有什么能阻止您实现自己的类,以便使用插入和提取运算符以您希望的任何形式序列化二进制数据。这样的类可能会在内部使用 ifstream 对象的读取函数。或者,boost serialization library可能已经完全符合您的要求。
关于c++ - 为什么我不能用 operator>> 读取 fstream 的二进制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151840/