Я пытаюсь создать новый файл растрового изображения, используя C. Это структура для заголовка файла .bmp.
#define uint16 unsigned short
#define uint32 unsigned long
#define uint8 unsigned char
typedef struct
{
uint16 magic; //specifies the file type "BM" 0x424d
uint32 bfSize; //specifies the size in bytes of the bitmap file
uint16 bfReserved1; //reserved; must be 0
uint16 bfReserved2; //reserved; must be 0
uint32 bOffBits;
} BITMAPFILEHEADER;
В моей программе я делаю это.
main() {
FILE* fp;
fp = fopen("test.bmp", "wb");
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
bmfh.magic = 0x4d42; // "BM" magic word
bmfh.bfSize = 70;
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bOffBits = 54;
fwrite(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fclose(fp);
}
Итак, когда я читаю свой файл test.bmp, он должен содержать 14 байт (размер структуры), а значения должны быть
42 4d 46 00 00 00 00 00 00 00 36 00 00 00
Но если я прочитаю файл, он покажет мне 16 байт:
42 4d 04 08 46 00 00 00 00 00 00 00 36 00 00 00
Откуда это "04 08"? Мой файл bmp становится поврежденным.
Мой вопрос заключается в том, что при вводе-выводе двоичного файла, если я пишу структуру в файл, и его размер не кратен 4 байтам (32 бита), он автоматически меняет структуру?
Любая идея, как обойти это?