无法在 C 语言中为 png 创建结构



我不知道我的结构有什么问题。

这是嵌套 png Head的数据的真正基本结构:

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("%in", h->ihdr.size);
    free(h);
    fclose(img);
    return 0;
}

有人可以向我解释这种结构有什么问题,或者如果没有什么错,我该更改如何使事情变得锻炼?

字节顺序。

您已经从磁盘中读取了字节00 00 00 0D,并将它们直接塞入低端整数中,它们将其解释为0 256*0 65536*0 16777216*13 = 218103808

您可能应该做的是将整数从大型转换为机器格式。或编写实用程序功能以读取文件指针(或文件描述符)的相关数据,并编写一个专用的"加载png函数",该功能调用单个数据类型的读取器并填充您的struct(s)。

<</p>

最新更新