当前位置: 代码迷 >> 综合 >> #pragma pack(push) #pragma pack(n) #pragma pack(pop)
  详细解决方案

#pragma pack(push) #pragma pack(n) #pragma pack(pop)

热度:17   发布时间:2023-12-27 14:59:21.0

// 参考bmp.h

设置编译器使存储的结构体n字节对齐
    #pragma pack(push)
    #pragma pack(n)    // 强制让编译器内存对齐为:1字节对齐 /* 必须在结构体定义之前使用 */
        // 在这儿定义多个结构体 // 
    #pragma pack(pop)  /* 恢复先前的pack设置 */


如:

#pragma pack(push) /* 将当前pack设置压栈保存 */
#pragma pack(1)    // 强制让编译器内存对齐为:1字节对齐 /* 必须在结构体定义之前使用 */
// 文件信息头
typedef struct file_info_head {u16  bfType;  		/* 数据类型 */  u32  bfSize; u16  bfReserved1; u16  bfReserved2; u32  bfOffBits;
} file_info_head_t; // 位图信息头
typedef struct bitmap_info_head { /* bmih */u32 biSize; 		  // 位图信息头的大小	s32 biWidth; 		  // 位图的宽度(单位是像素)s32 biHeight;		  // 如果为正,说明位图倒立(即数据表示从图像的左下角到右上角),如果为负说明正向;		u16 biPlanes; 		  // 颜色平面数,总被设置为1u16 biBitCount; 	  // bpp: 一个像素用几位表示, 1、2、4、8、16、24、32;u32 biCompression;    // 表示不压缩, 必须为0。u32 biSizeImage; 	  // 实际图像大小 = 文件大小 - 偏移量; s32 biXPelsPerMeter;  // 单位是像素/米,有符号整数;	s32 biYPelsPerMeter;  // 单位是像素/米,有符号整数;u32 biClrUsed; 	  	  // 为0说明使用所有;u32 biClrImportant;   // 为0说明都重要;
} bitmap_info_head_t;#pragma pack(pop) /* 恢复先前的pack设置 */

 

  相关解决方案