Как скопировать содержимое неупакованной структуры в структуру __packed__? - PullRequest
1 голос
/ 09 января 2012

Я прочитал о __packed__ из здесь , и я понял, что когда __packed__ используется в struct или union, это означает, что переменные-члены размещаются таким образом чтобы минимизировать объем памяти, необходимый для хранения struct или union.

Теперь рассмотрим структуры в следующем коде. Они содержат одинаковые элементы (одинаковые 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 ]

6 голосов
/ 09 января 2012

Боюсь, ты просто должен это написать.Ничто в стандарте C (или любом другом известном мне стандарте) не сделает этого за вас.Напишите это один раз и никогда не думайте об этом снова.

ps ups_to_ps(ups ups) {
    return (ps) {
        .c = ups.c,
        .i = ups.i,
        .f = ups.f,
        .d = ups.d,
    };
}
1 голос
/ 09 января 2012

Без подробного знания различий в расположении памяти двух структур: №

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...