typedef union { unsigned char[3] _c; unsigned int rgb; } uPixel; // ... somewhere there is a struct containing all header info sequentially void read() { std::ifstream _file; _file.open("somefile.bmp", std::ios::in | std::ios::binary); // new struct header obj bithdr_t _hdr; // read all header info _file((char*)&_hdr, sizeof(_hdr)); uPixel* pixel = new uPixel[_hdr.length]; // HERE IS THE PROBLEM... unsigned int n = 0; while(n < _hdr.datablock_len) { ++n; // THIS MUST BE WRONG and it will read up to 4bytes, because of the int inside the union ..... _file.read((char*)&pixel[n], sizeof(uPixel)); } _file.close(); }