本文共 929 字,大约阅读时间需要 3 分钟。
在实际开发中,我们需要了解如何正确地对齐和解析各种数据格式。以下是一个关于GIF头片结构对齐方式的实际示例:
#pragma pack(1) struct gif_hdr { char signature[3]; char version[3]; int width; char height; char colormap; char bgcolor; char ratio; } __attribute__((aligned(4))); // 结构体大小计算 struct gif_hdr v1 = {1,2,3,4,5,6,7,8,9,10,11}; struct gif_hdr *dsptr; // 分配结构体内存 dsptr = (struct gif_hdr *)malloc(sizeof(struct gif_hdr)); // 打印结构体地址和偏移量 printf("结构体地址:%p\n", dsptr); printf("结构体大小:%d\n", sizeof(struct gif_hdr)); // 打印各字段的偏移量 printf("字段名:地址Offset\n"); printf("signature[0]:%p\n", dsptr->signature[0]); printf("version[0]:%p\n", dsptr->version[0]); printf("width:%p Offset\n", (char *)dsptr->width, dsptr->signature[0]);
结构体地址:006E1898
结构体大小:16signature[0]:006E1898 Offsetversion[0]:006E189B Offsetwidth:006E18A0 Offsetheight:006E18A4 Offsetcolormap:006E18A5 Offsetbgcolor:006E18A6 Offsetratio:006E18A7 Offset转载地址:http://qjrvz.baihongyu.com/