我有一个C结构定义在我的代码之外的某处。我可以定义相同结构的打包版本吗?如果我从一开始就定义自己的结构,即简单:定义打包版本的C结构
struct test {
// members
} __attribute__((packed));
我定义了一个结构简单,尝试了两种可能性,这样的:
struct test {
int x;
double y;
char z;
};
struct test_p {
struct test __attribute__((packed)) s;
};
这:
struct test {
int x;
double y;
char z;
};
struct test_p {
struct test p;
} __attribute__((packed));
但是,在我的系统上(我在64位机器上使用gcc 4.8.2)与sizeof(struct test)相同,这两种工作都无法正常工作(都编译得很好),所以打印sizeof(struct test_p)= 24。有没有办法达到预期的效果?
以防万一你想知道:我想解析通过网络收到的只是打包结构的数据包。问题是,我无法修改头文件,因为它是第三方库的一部分,并且结构本身包含太多字段以逐一复制它们。我当然可以将结构定义复制到我自己的头文件中并制作压缩版本 - 实际上它是我现在使用的解决方案 - 但我只是想知道是否有一个更简洁的解决方案,它不涉及复制整个定义。
一个有趣的问题,但我不认为你会找到一个优雅的解决方案; “您只能在枚举,结构或联合的定义上指定此属性,而不能在不定义枚举类型,结构或联合的typedef上指定此属性。” https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html – Dave 2014-08-29 07:28:54