代码如下,需要注意结构体对齐问题,编译环境为gcc。
#include <stdio.h>
struct bitmap_fileheader {
unsigned short type;
unsigned int size;
unsigned short reserved1;
unsigned short reserved2;
unsigned int off_bits;
} __attribute__ ((packed));
struct bitmap_infoheader {
unsigned int size;
unsigned int width;
unsigned int height;
unsigned short planes;
unsigned short bit_count;
unsigned int compression;
unsigned int size_image;
unsigned int xpels_per_meter;
unsigned int ypels_per_meter;
unsigned int clr_used;
unsigned int clr_important;
} __attribute__ ((packed));
int main(int argc, char *argv[])
{
FILE *fp;
struct bitmap_fileheader fh;
struct bitmap_infoheader ih;
if (argc < 2) {
printf("please select a bitmap file!\n");
return -1;
}
fp = fopen(argv[1], "rb");
if (fp == NULL) {
printf("no such bitmap file!\n");
return -1;
}
fread(&fh, 1, sizeof(struct bitmap_fileheader), fp);
printf("type = %x size = %d off_bits = %d\n",
fh.type, fh.size, fh.off_bits);
fread(&ih, 1, sizeof(struct bitmap_infoheader), fp);
printf("size = %d width = %d height = %d bit_count = %d\n",
ih.size, ih.width, ih.height, ih.bit_count);
fclose(fp);
return 0;
}