1.
#pragma pack(push,1)
typedef struct tagBITMAPFILEHEADER {
uint16_t bfType;
uint32_t bfSize;
uint32_t bfReserved;
uint32_t bfOffBits;
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER {
uint32_t biSize;
int32_t biWidth;
int32_t biHeight;
uint16_t biPlanes;
uint16_t biBitCount;
uint32_t biCompression;
uint32_t biSizeImage;
int32_t biXPelsPerMeter;
int32_t biYPelsPerMeter;
uint32_t biClrUsed;
uint32_t biClrImportant;
} BITMAPINFOHEADER;
#pragma pack(pop)
按照上面的代碼寫出來的檔案,檔案圖檔打開失敗,說檔案破損。
後來才發現BMPFILEHEADER_T這個資料接口的内部變量排序,并沒有4位元組對齊,導緻sizeof(BMPFILEHEADER_T)比預想的大!
是以直接用宏設定資料結構的位元組對齊方式為:1位元組對齊。