结构字节对齐问题 XCode 4.3.



我正在尝试使用结构来映射位图文件的标头。似乎编译器正在执行 4byte(32 位)对齐,但我需要 2Byte。我试图通过编译器指令进行更改,如下所示

#pragma pack(2)

__attribute__ ((aligned(xx)));

这两个似乎没有任何效果。有没有其他方法可以做到这一点?我在Mac OS X Lion上使用XCode 4.3。我测试了Apple LLVM和Apple GCC编译器。

这是结构类型定义

typedef struct {
    int16_t bfType; 
    int32_t bfSize;
    int16_t bfReserved1;
    int16_t bfReserved2;
    int32_t bfOffBits;
    int32_t biSize;
    int32_t biWidth;
    int32_t biHeight;
    int16_t biPlanes;
    int16_t biBitCount;
    int32_t biComression;
    int32_t biSizeImage;
    int32_t biXPelsPerMeter;
    int32_t biYPelsPerMeter;
    int32_t biClrUsed;
    int32_t biClrImportant;
} THeader;
嗯? 在我的

机器上工作吗?请记住,包编译指示可能在其他地方被覆盖?

#include <inttypes.h>
#include <stddef.h>
#pragma pack(push,2)
typedef struct {
int16_t bfType; 
int32_t bfSize;
int16_t bfReserved1;
int16_t bfReserved2;
int32_t bfOffBits;
int32_t biSize;
int32_t biWidth;
int32_t biHeight;
int16_t biPlanes;
int16_t biBitCount;
int32_t biComression;
int32_t biSizeImage;
int32_t biXPelsPerMeter;
int32_t biYPelsPerMeter;
int32_t biClrUsed;
int32_t biClrImportant;
} THeader;
#pragma pack(pop)
#include <stdio.h>
int main(void)
{
printf("%lun", offsetof(THeader, bfType));
printf("%lun", offsetof(THeader, bfSize));
printf("%lun", offsetof(THeader, bfReserved1));
printf("%lun", offsetof(THeader, bfReserved2));
return 0;
}

$ clang -o pack pack.c
$ ./pack
0
2
6
8

最新更新