gpt4 book ai didi

c - 如何在不使用#pragma pack 或 __atribute__((packed)) 的情况下通过结构指针读取 BMP 文件并访问其 header 信息?

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:53 27 4
gpt4 key购买 nike

这是我的代码。我想知道如何“正确地”读取 BMP 文件,然后在不强制打包结构的情况下读取 header 值。

typedef struct __attribute__((packed)){
uint8_t magic[2]; /* the magic number used to identify the BMP file:
0x42 0x4D (Hex code points for B and M).
The following entries are possible:
BM - Windows 3.1x, 95, NT, ... etc
BA - OS/2 Bitmap Array
CI - OS/2 Color Icon
CP - OS/2 Color Pointer
IC - OS/2 Icon
PT - OS/2 Pointer. */
uint32_t filesz; /* the size of the BMP file in bytes */
uint16_t creator1; /* reserved. */
uint16_t creator2; /* reserved. */
uint32_t offset; /* the offset, i.e. starting address,
of the byte where the bitmap data can be found. */
} bmp_header_t;

fp = fopen("input.bmp", "r");
bmp_header_p = malloc(sizeof(bmp_header_t));

fread(bmp_header_p, sizeof(char), 14, fp);

printf("magic number = %c%c\n", bmp_header_p->magic[0], bmp_header_p->magic[1]);
printf("file size = %" PRIu32 "\n", bmp_header_p->filesz);

最佳答案

您不能一次fread() 进入整个结构。相反,您 fread() 分别进入其字段,如下所示:

if (fread(&header->magic[0], 2, 1, fp) != 1) {
// error
}

if (fread(&header->filesz, 4, 1, fp) != 1) {
// error
}

关于c - 如何在不使用#pragma pack 或 __atribute__((packed)) 的情况下通过结构指针读取 BMP 文件并访问其 header 信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17255104/

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