#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
using namespace std;
int main(){
ifstream is;
is.open ("binary_file.dat", ios::binary );
char file_version[4];
is.read(file_version, 4);
int fv_int;
memcpy(&fv_int, file_version, sizeof(fv_int));
cout << fv_int;
}
但结果并不是我的意思。程序将文件的第一个字节复制到正确的位置,但将其余的字节视为0。例如:
我文件的前4个字节:
10101010 00101100 00101100 00101100
程序执行后fv_int的内容是什么:
10101010 00000000 00000000 00000000
有没有办法访问整数的特定字节?或者更好的方法是从文件中读取字节?
答案 0 :(得分:2)
istream :: read不能读取4个字节,它返回读取的字节数。检查返回值,您的文件可能太短
其他提示:
您可以执行is.read(reinterpret_cast<char*>(&fv_int), size_of(fv_int));
以减少代码量并添加详细程度
答案 1 :(得分:1)
如果我用前4个字节的文件提供你的程序,它会读取&amp;显示它们完美。要进一步诊断,请将最后一个cout更改为:cout <<sizeof(int)<<" "<<hex<<fv_int<<endl;