读书人

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

发布时间: 2013-07-08 14:13:00 作者: rapoo

对齐遇上不对齐,该怎么办?
本帖最后由 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 里, 你可以直接用, 不用自己再去定义. 要自己定义也可以参考系统的定义方法来.

读书人网 >C语言

热点推荐