Сериализация и десериализация структуры в C / C ++ - PullRequest
0 голосов
/ 10 июля 2020

У меня есть такая структура:

typedef struct myStruct
 {

                int attr;
                 char *name;
                 size_t nameSize;

 }

Я хочу сериализовать ее и сериализовать. Я нашел ответы, но все они использовали более простую структуру (без указателей). Кроме того, в своей функции я должен получить указатель на структуру, а не на саму структуру. Поэтому я не могу использовать sizeof.

Как я могу сериализовать это в буфер, чтобы потом десериализовать его?

int serializeData(myStruct *componentInfo, void *buffer, size_t bufferSize, size_t *result)
{

    int dataSize = 0;
    dataSize += sizeof(int);
    dataSize += strlen(componentInfo->name);
    dataSize += sizeof(size_t);
    char data[dataSize+1];

    int offset =0;
    memcpy(data, &componentInfo->attr, sizeof(int));
    offset+=sizeof(int);

    memcpy(data + offset, &componentInfo->nameSize, sizeof(size_t));
    offset+= sizeof(size_t);

    memcpy(data + offset, componentInfo->name, componentInfo->nameSize);
    offset+= componentInfo->nameSize;

    printf("%s",data);
    printf("a    %zu",strlen(data));
    return 1;
}
...