在 C 中,您必须手动序列化结构(将它们转换为一系列字节)。如果你想让你输出的数据被另一台机器读取,你必须使用字节顺序帐户endianness。
这是一个序列化结构(将其写入文件)的简单示例,忽略字节顺序/不同的字长并使代码不可移植:
size_t length;
length = strlen(s->name) + 1;
fwrite(&length, sizeof(length), 1, fp);
fwrite(s->name, 1, length, fp);
length = strlen(s->surname) + 1;
fwrite(&length, sizeof(length), 1, fp);
fwrite(s->surname, 1, length, fp);
fwrite(&s->age, sizeof(s->age), 1, fp);
反序列化:
size_t length;
fread(&length, sizeof(length), 1, fp);
s->name = malloc(length);
fread(s->name, 1, length, fp);
fread(&length, sizeof(length), 1, fp);
s->surname = malloc(length);
fread(s->surname, 1, length, fp);
fread(&s->age, sizeof(s->age), 1, fp);
在实际应用中,您应该检查输入的有效性,而不是盲目地假设输入是有效且值得信赖的。此外,您需要决定使用什么字节顺序来存储 ints、size_ts 等,并确保通过使用位移以正确的字节顺序读取/写入它们。
顺便说一句,你可能想看看tpl,一个简单的 C 二进制序列化库。