c++ - 不代表正确数量的结构的字节计数。

标签 c++ c

我正在编写一个位图加载程序,但字节数无法正常工作。我目前正在使用运行 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/

相关文章:

c++ - 如何在使用派生实例调用模板基类的好友函数时避免使用 “std::static_pointer_cast”

c - 套接字编程无法提取从c中的客户端发送的数据

c - 辛普森法则积分

c - 当我将相同的代码放在一个函数中与将它内联写入 C 中时,结果不同

c++ - 没有正确检测输入

c++ - 出现无法分配内存错误

c - mask 变量在 CRC 校验和计算中起什么作用?

c - 字符串表如何工作?

c++ - char 数组上的可变参数

C++,Qt - 锁定保护和返回对对象的不可分配引用的安全性