2

大家好!我正在尝试读取文件的前 4 个字节并将它们存储在整数变量中。这就是我正在做的事情:

#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

有没有办法访问特定的整数字节?或者也许是从文件中读取字节的更好方法?

4

2 回答 2

2

istream::read 不完全读取 4 个字节,它返回读取的字节数。检查返回值,你的文件可能太短了

附加提示:您可以is.read(reinterpret_cast<char*>(&fv_int), size_of(fv_int));减少代码量并增加详细程度

于 2012-12-24T20:03:49.823 回答
1

如果我为您的程序提供前 4 个字节的文件,它会完美地读取并显示它们。如需进一步诊断,请将最后一个 cout 更改为:cout <<sizeof(int)<<" "<<hex<<fv_int<<endl;

于 2012-12-24T20:12:09.693 回答