Чтение смешанных данных в структуру C - PullRequest
1 голос
/ 06 августа 2011

Я пытаюсь прочитать смешанные данные в структуру C

обычно я делаю что-то подобное

typedef struct data {
    uint32_t value;
    float x,y,z;
} __attribute__((__packed__));

и прочитайте это так:

data x;
fread(&x, 1, sizeof(data), filePointer);

и это прекрасно работает для данных фиксированной длины, однако мне нужно загрузить строку ASCIIZ переменной длины, и мне было интересно, есть ли простой способ прочитать это в структуру

Ответы [ 2 ]

1 голос
/ 06 августа 2011

Есть два способа сохранить строку ASCIIZ в структуре, например:

struct asciiz_1
{
    char asciiz[32];
};
struct asciiz_2
{
    size_t buflen;
    char  *buffer;
};

Первый (struct asciiz_1) может обрабатываться так же, как ваш struct data; даже если строка может иметь переменную длину с мусором после нулевого (нулевого) байта, структура в целом имеет фиксированный размер и может безопасно обрабатываться с помощью fread() и fwrite().

Второе (struct asciiz_2) - безнадежное дело. Вы должны выделить дополнительное пространство для получения строки (предположительно, после чтения длины), и значение указателя не должно записываться в файл (это не будет иметь никакого значения для процесса чтения). Таким образом, вы должны обращаться с этим по-другому.

Ваша структура данных - ваш выбор.

1 голос
/ 06 августа 2011

Извините, но для C. нет встроенной сериализации. Ранее об этом спрашивали в SO с некоторыми очень хорошими ответами .

Если это не дает вам того, что вы хотите, то ищите C serialize или C serialization в вашей любимой поисковой системе.

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