【发布时间】:2017-06-19 00:23:14
【问题描述】:
我正在编写一些代码来读取位图文件。
这是我用来读取位图标题的结构。另见:
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 字节边界上重新对齐结构中的数据,大概是为了提高效率。当然,这使我无法读取位图...即使 microsoft 和其他人,请指定这是执行此操作的方法...
如何防止结构重新对齐?
【问题讨论】:
-
为什么这会导致它无法使用?您确实意识到应该将数据反序列化到您的程序中?
-
因为当我读取 sizeof(BITMAPFILEHEADER) 时,读取的不是 14 个字节,而是 16 个字节。
-
您是在自己创建这个结构定义吗?
windows.h标头已经包含了这个和pragma的必要集以使大小为 14。 -
这很烦人,但你不能只读取 14 个字节吗?
-
不幸的是,有些字节没有对齐
标签: c++ bitmap c++14 file-format