如何将解压缩的结构的内容复制到__packed__结构?

时间:2012-01-09 17:13:05

标签: c struct

我从here了解了__packed__,我明白在__packed__struct中使用union时,就意味着成员变量以这样的方式放置以最小化存储structunion所需的内存。

现在,考虑以下代码中的结构。它们包含相同的元素(相同的type,相同的变量名称并以相同的顺序放置)。不同的是,一个是__packed__而另一个不是。

#include <stdio.h>

int main(void)
{

    typedef struct unpacked_struct {
        char c;
        int i;
        float f;
        double d;
    }ups;

    typedef struct __attribute__ ((__packed__)) packed_struct {
        char c;
        int i;
        float f;
        double d;
    }ps;

    printf("sizeof(my_unpacked_struct)  : %d \n", sizeof(ups));
    printf("sizeof(my_packed_struct)    : %d \n", sizeof(ps));

    ups ups1 = init_ups();
    ps ps1;

    return 0;
}

有没有办法可以在不执行ups1的情况下将解压缩的结构ps1复制到压缩结构member-variable-wise-copy中?是否有类似memcpy()的内容适用于此处?

2 个答案:

答案 0 :(得分:6)

我担心你只需写出来。标准C(或我所知的任何标准)中的任何内容都不会为您执行此操作。写一次,再也不要再考虑了。

ps ups_to_ps(ups ups) {
    return (ps) {
        .c = ups.c,
        .i = ups.i,
        .f = ups.f,
        .d = ups.d,
    };
}

答案 1 :(得分:1)

没有详细了解两种结构的内存布局的差异:否。