Имеется следующий код на C++, который считывает некоторую структуру из бинарного файла. После загрузки данных при доступе к полям структуры выясняется, что они выравниваются на 4 байта.
typedef unsigned short WORD; //16-bit
typedef unsigned int DWORD; //32-bit
//The BITMAPFILEHEADER structure contains information about the type, size, and layout of a file that contains a DIB.
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
int O1=(char*)&bmfh.bfType-(char*)&bmfh;
int O2=(char*)&bmfh.bfSize-(char*)&bmfh;
int O3=sizeof(bmfh.bfType);
int O4=sizeof(WORD);
int O5=sizeof(BITMAPFILEHEADER);
Значения смещений будут следующими:
O1==0
O2==4
O3==2
O4==2
O5==14
По идее значение O2 должно быть равным 2. Как сделать, чтобы выравнивание при доступе к элементам структуры было правильным?