今天这个问题困扰了我很久。取一个位图函数头,书上的方法是:
PBYTE pFile;
BITMAPFILEHEADER * pmbfh;
BITMAPV5HEADER * pmbih;
pFile=malloc(dwFileSize);
ReadFile(hFile, pFile,.....);
pmbfh=(BITMAPFILEHEADER *)pFile;
pmbih=(BITMAPV5HEADER *)(pFile + sizeof(BITMAPFILEHEADER));
我写类的时候为了方便就直接往文件头里面读:
pmbfh=(BITMAPFILEHEADER * )malloc(dwFileSize);
ReadFile(hFile, pmbfh,.....);
pmbih=(BITMAPV5HEADER *)(pmbfh + sizeof(BITMAPFILEHEADER));
读数据一切正常,可是在从pmbih结构体里读取位图信息的时候报错,我最后没有办法,把读出的数据用二进制显示来看哪里的问题。最终问题是出在这里:pmbih=(BITMAPV5HEADER *)(pmbfh + sizeof(BITMAPFILEHEADER));
pmbfh是位图文件头类型的指针,加上一个整数,按照指针运算,会依照自己指向类型的大小移动,而sizeof返回的是后面位图文件头结构体的字节单位大小,所以移动的偏移量不对了。而pFile本身就是字节型的指针,所以是正确的。以后要注意指针运算。