为什么我不能用operator >>读取fstream的二进制数据?

Gal*_*alf 16 c++ binary fstream stream

如果我执行以下操作:

ifstream file;
file.open("somefile", ios::binary);

unsigned int data;

file >> data;
Run Code Online (Sandbox Code Playgroud)

我的流将始终设置,failbit并且data将保持未初始化.但是,如果我读了一个char或者unsigned char相反,那么流就可以了. perror()告诉我"结果太大".

我在Google上看到的唯一一件事是建议说不operator>>应该用于二进制数据(首选read()),但我发现操作员更清洁,更容易使用 - 并且它不需要投射所有内容.

有人可以解释这个问题吗?

Jud*_*den 12

所述的iostream抽取运算符(>>)尝试解释由空格,而不是二进制数据分离数值字符串.有许多不同的方法来编码二进制形式的无符号整数(例如,以小端字节顺序的32位2的补码表示).这就是为什么必须使用/函数来操作这种二进制缓冲区的原因.

但是,没有什么能阻止您使用插入和提取操作符来实现您自己的类,以便以任何形式序列化二进制数据.这样的类可能会在内部使用ifstream对象的read函数.或者,boost序列化库可能已经完全符合您的要求.