我正在编写一个位图加载程序,但字节数无法正常工作。我目前正在使用运行 64 位 unix 可执行文件的 Xcode。
代码:
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int DWORD;
typedef struct {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffbits;
} BITMAPFILEHEADER;
sizeof 函数说 BITMAPFILEHEADER 结构是 16 字节,而它应该是 14 字节。有什么建议吗?
最佳答案
您“应该是 14”的概念是错误的。结构通常会填充到成员的对齐方式。为了实现正确对齐的高效包装,您应该按尺寸对成员进行排序。
这是你的结构可能在内存中结束的方式:
WORD [2]
*padding* [2]
DWORD [4] -- align to 4
WORD [2]
WORD [2] -- OK, align to 2
DWORD [4]
即使您将其重新排列为 4, 4, 2, 2, 2
,您最终可能仍会得到 16 而不是 14,因为该结构可能会被填充为最大成员大小的倍数.
关于c++ - 不代表正确数量的结构的字节计数。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7154904/