In C müssen Sie die Strukturen manuell serialisieren (in eine Reihe von Bytes konvertieren). Wenn Sie möchten, dass die von Ihnen ausgegebenen Daten von einer anderen Maschine gelesen werden können, müssen Sie das Endianness-Konto endianness verwenden.
Hier ist ein einfaches Beispiel der Struktur der Serialisierung (in eine Datei zu schreiben), abgesehen von Endian/abweichender Wortgröße und macht den Code portabel:
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);
Und unserialize:
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);
In einer realen Anwendung sollten Sie die Gültigkeit Ihrer Eingabe überprüfen und nicht blind davon ausgehen, dass die Eingabe gültig und vertrauenswürdig ist. Außerdem müssen Sie entscheiden, welche Byte-Reihenfolge Sie verwenden werden, um Ihre int
s, size_t
s usw. zu speichern, und stellen Sie sicher, dass Sie sie in der korrekten Byte-Reihenfolge lesen/schreiben, indem Sie bit shifting verwenden.
By the way, können Sie bei tpl, eine einfache binäre Serialisierung Bibliothek für C.
Das wird nicht funktionieren mit der gesetzten Strukturdefinition aussehen wollen - 'sizeof (s-> Name)' die geben Größe eines 'char *'. – caf
Yup, du hast recht - ich habe die Größe geändert, um zu strlen –
so jetzt müssen Sie es zu strlen() ändern * sizeof (char) ... (Nun, sizeof (char) wird 1 sein, nur für die Prinzip: – rkellerm