关于字节对齐问题

今天在进行嵌入式移植某个算法时,移植之前,我按照惯例,先把程序在VS上修改成适合嵌入式linux的版本,我先在VS把linux中没有的头文件windows.h去掉以后,手动实现了一个程序里面需要用到的某个结构体BITMAPFILEHEADER,然后运行,程序竟然在loadImage(自己的API)的时候竟然就开始出错,src_img竟然是一个非常大的数,我经过断电排查,发现了一个bug,,,是有关于字节对齐的问题,由于我用的处理器默认的处理是按照四字节对齐的,所以结构体内的成员存储时都是按照"存放起始地址%N=0"

来存储的,,,所以导致我的用到的结构体的大小是16,而真正的大小应该是14。。。。真坑,果断在自己手动实现的结构体前面加了#pragma pack (2),使结构体按照windos.h中正确的2字节对齐来存储,结果运行正确。

#pragma pack (4) 
typedef struct tagBITMAPFILEHEADER {
	WORD    bfType;
	WORD    bfReserved1;
	WORD    bfReserved2;
	DWORD   bfOffBits;
	DWORD   bfSize;
}BITMAPFILEHEADER;//, *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER {
	DWORD      biSize;
	LONG       biWidth;
	LONG       biHeight;
	WORD       biPlanes;
	WORD       biBitCount;
	DWORD      biCompression;
	DWORD      biSizeImage;
	LONG       biXPelsPerMeter;
	LONG       biYPelsPerMeter;
	DWORD      biClrUsed;
	DWORD      biClrImportant;
} BITMAPINFOHEADER;// , *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
#pragma pack ()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值