首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

对齐遇上不对齐,该怎么处理

2013-07-08 
对齐遇上不对齐,该怎么办?本帖最后由 jizhen521 于 2013-05-24 14:03:28 编辑读一个.bmp文件的头,文件头有

对齐遇上不对齐,该怎么办?
本帖最后由 jizhen521 于 2013-05-24 14:03:28 编辑 读一个.bmp文件的头,文件头有14+40个字节。
而字节的描述如下。
Byte Number Description
0-1 File descriptor. Always equal to the bytes, "BM" (0x42 0x4d) 
2-5 File size in bytes filesize = byte[2] + (byte[3] * 28) + (byte[4] * 216) + (byte[5] * 224) 
6-9 Reserved bytes, all bytes are zero 
10-13 Bitmap Header Offset Length. Bitmap headers are 54 bytes in length. Byte 10 contains the value 54, bytes 11-13 are zero.
于是我构造了结构体
typedef struct tagBITMAPFILEHEADER{
    short bfType;
    int bfSize;
    short bfReserved1;
    short bfReserved2;
    int bfOffBits;
} BITMAPFILEHEADER;//2+4+2+2+4
但是由于4字节对齐的原因,通过fread读取文件数据给结构体变量的时候,数据就错乱了。(可以通过修改对齐方式改成1字节对齐搞定,但好像不是常理)想问是不是读此类文件不应该通过结构体拿数据,而是通过字节数组来拿数据。 struct 数据对齐 结构体 fread bitmap
[解决办法]
在这个结构体前面加 #pragma pack(1)
这个结构完了后加 #pragma pack()
[解决办法]
可以用结构体,不过所有成员都是char类型
实际上你这里面的short或int数据根本都不对应,还要考虑大小端,根本没意义
[解决办法]
Windows 已经定义过这个结构了, 在 wingdi.h 里, 你可以直接用, 不用自己再去定义. 要自己定义也可以参考系统的定义方法来.

热点排行