从文件读取字节为短/长整数

时间:2012-12-24 20:00:31

标签: c++ integer byte

大家好!我正在尝试读取文件的前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

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

2 个答案:

答案 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;