gpt4 book ai didi

c++ - 如何从二进制文件填充结构,同时避免内存对齐填充引起的问题?

转载 作者:行者123 更新时间:2023-12-03 07:21:53 25 4
gpt4 key购买 nike

我目前正在尝试使用以下代码读取位图文件头:

#include <fstream>
using namespace std;

struct BitMapFileHeader {
uint16_t bfType;
uint32_t bfSize;
uint16_t bfReserved1;
uint16_t bfReserved2;
uint32_t bfOffBits;
} file_header;

int main() {
ifstream fin;
fin.open("input.bmp", ios::binary);

fin.read(reinterpret_cast<char*>(&file_header), sizeof(file_header));

}
我文件的前几个字节是 42 4D 36 53 07 00 00 00file_header.bfType显示第一个和第二个字节中包含的 19778的正确值,但是 filder_header.bfSize显示 7,它存储在第5个字节中,并且似乎跳过了第3个和第4个字节。
看来我遇到了 this问题的第二个答案的注释中提到的问题。尽管确定了问题,但我不知道如何解决。有人可以指出我正确的方向吗?
编辑:由于性能问题和未对齐的内存访问,一些建议不要打包结构成员。除了一个一个地填充每个struct成员之外,还有什么方法可以避免这种性能损失?

最佳答案

在struct之后使用__attribute__ ((packed)):

struct BitMapFileHeader {
uint16_t bfType;
uint32_t bfSize;
uint16_t bfReserved1;
uint16_t bfReserved2;
uint32_t bfOffBits;
} __attribute__ ((packed)) file_header;

关于c++ - 如何从二进制文件填充结构,同时避免内存对齐填充引起的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64872214/

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