位图文件的结构体

朝风工作室 2016-09-01 02:20:23
我想问下应该怎么自定义位图文件的位图头结构体才能使其恰好为14个字节?不想把其中的提出来。
其中 WORD为unsigned short型 DWORD为unsigned long型
typedef struct //14byte, 位图文件头
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffset;
}BitMapFileHeader;
...全文
161 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-09-02
  • 打赏
  • 举报
回复
搜结构体对齐 就明白了
朝风工作室 2016-09-02
  • 打赏
  • 举报
回复
多谢6楼 已解决 这个结构体需要自己定义对齐方式 可以在结构体前面加#pragma pack(2) //两字节对齐,否则bmp_fileheader会占16Byte
060 2016-09-02
  • 打赏
  • 举报
回复
Windows SDK 中这么定义的

#include <pshpack2.h>
typedef struct tagBITMAPFILEHEADER {
        WORD    bfType;
        DWORD   bfSize;
        WORD    bfReserved1;
        WORD    bfReserved2;
        DWORD   bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
#include <poppack.h>
pshpack2.h 中这么定义的

#if ! (defined(lint) || defined(RC_INVOKED))
#if ( _MSC_VER >= 800 && !defined(_M_I86)) || defined(_PUSHPOP_SUPPORTED)
#pragma warning(disable:4103)
#if !(defined( MIDL_PASS )) || defined( __midl )
#pragma pack(push,2)
#else
#pragma pack(2)
#endif
#else
#pragma pack(2)
#endif
#endif /* ! (defined(lint) || defined(RC_INVOKED)) */
也就是说,tagBITMAPFILEHEADER 的结构体对齐是按照2个字节对齐的
朝风工作室 2016-09-01
  • 打赏
  • 举报
回复
现在不得不把位图文件类型byType 拿出来写了。。
朝风工作室 2016-09-01
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
为什么会是14,根据结构体的定义它的长度是16啊 是windows做了什么修改吗 我这样检查就是16 #include "stdafx.h" #include <iostream> #include <stdlib.h> typedef unsigned short WORD; typedef unsigned long DWORD; typedef unsigned char BYTE; #define BM 19778 // 位图的标志 typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER; int _tmain(int argc, _TCHAR* argv[]) { BITMAPFILEHEADER A; int a=sizeof(A); std::cout<<a; system("pause"); return 0;
paschen 2016-09-01
  • 打赏
  • 举报
回复
typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧