gpt4 book ai didi

无法在 C 中为 png 创建结构

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:50 25 4
gpt4 key购买 nike

我无法弄清楚我的结构有什么问题。

这是嵌套 PNG 头像数据的基本结构:

typedef struct _chunk Chunk;
typedef struct _file_header file_header;


#pragma pack(push, 1)

struct _chunk
{
unsigned int size;
unsigned char type[4];
};

struct _file_header
{
unsigned char signature[8];
Chunk ihdr;
};

#pragma pack(pop)

这是主程序的片段:

int main ()
{
FILE* img;
file_header* h;

if ((img=fopen("flower.png", "rb")) == NULL) {
printf("file not found.\n");
exit(1);
}


h = (file_header*)malloc(sizeof(file_header));
fread(h, sizeof(char), sizeof(file_header), img);

// the ouput from the printf below should be "13"
// but what it shows is "218103808" !! (?)
printf("%i\n", h->ihdr.size);

free(h);
fclose(img);
return 0;
}

有人可以向我解释这个结构有什么问题吗,或者如果没有问题,我应该改变什么才能使事情顺利进行?

最佳答案

字节顺序。

您已经从磁盘中读取字节 00 00 00 0D 并将它们直接填充到一个低端整数中,它们被解释为 0 + 256*0 + 65536*0 + 16777216 *13 = 218103808

您可能应该做的是在读取数据后将整数从大端格式转换为机器格式。或者编写实用程序函数以从文件指针(或文件描述符)读取相关数据,并编写专用的“加载 PNG 函数”来调用各个数据类型特定的读取器并填充您的结构。

关于无法在 C 中为 png 创建结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13051970/

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