Reading binary data into struct with ifstream

Dan picture Dan · Mar 5, 2014 · Viewed 24.7k times · Source

I'm trying to read binary data from a file using ifstream.

Specifically, I'm trying to populate this "Header" struct with data read from a file:

struct Header {
    char id[16];
    int length;
    int count;
};
  1. Now, if I read the file in this way, the result is exactly what I want:

    input.read((char*)&hdr, sizeof(hdr));
    
  2. But if I instead read each variable of the struct manually, the results are gibberish:

    input.read((char*)&hdr.id,     sizeof(hdr.id));
    input.read((char*)&hdr.length, sizeof(hdr.length));
    input.read((char*)&hdr.count,  sizeof(hdr.count));
    

My question is, what is happening here that makes these two methods return different results?

Answer

Marcel Zebrowski picture Marcel Zebrowski · Aug 25, 2018

It is also possible to read the struct in one step.

i.e. fh.read((char*)&h, sizeof(Header));