gpt4 book ai didi

C++ 编译器正在更改我的结构的对齐方式。我怎样才能防止这种情况发生?

转载 作者:太空狗 更新时间:2023-10-29 21:34:57 25 4
gpt4 key购买 nike

我正在编写一些代码来读取位图文件。

这是我用来读取位图 header 的结构。另见:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd183374(v=vs.85).aspx

struct BITMAPFILEHEADER
{
WORD bfType; // 2
DWORD bfSize; // 6
WORD bfReserved1; // 8
WORD bfReserved2; // 10
DWORD bfOffBits; // 14
}; // should add to 14 bytes

如果我将以下代码放在我的主函数中:

std::cout << "BITMAPFILEHEADER: " << sizeof(BITMAPFILEHEADER) << std::endl;

程序打印:

BITMAPFILEHEADER: 16

它似乎在 4 字节边界上重新对齐结构中的数据,大概是为了提高效率。当然,这使我无法读取位图......即使微软和其他人指定这是这样做的方式......

如何防止结构重新对齐?

最佳答案

我找到的解决方案适用于 linux 下的 gcc 编译器:

struct BITMAPFILEHEADER
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} __attribute__((packed));

可能有更好、更跨编译器/平台的做事方式,但我不知道它是什么。

关于C++ 编译器正在更改我的结构的对齐方式。我怎样才能防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44620755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com