Grundfrage, aber ich erwartete diese Struktur zu belegen 13 Bytes Speicherplatz (1 für den char, 12 für die 3 unsigned Ints). Stattdessen gibt mir sizeof(ESPR_REL_HEADER)
16 Bytes.Schreiben Sie Raw-Struktur Inhalt (Bytes) in eine Datei in C. Verwirrt über tatsächliche Größe geschrieben
typedef struct {
unsigned char version;
unsigned int root_node_num;
unsigned int node_size;
unsigned int node_count;
} ESPR_REL_HEADER;
Was ich versuche diese Struktur mit einigen Werten zu tun ist, initialisieren und schreiben Sie die Daten, die sie (die rohe Bytes) an den Anfang einer Datei enthält, so dass, wenn ich diese Datei öffne ich später kann ich rekonstruiere diese Struktur und gewinne einige Metadaten darüber, was der Rest der Datei enthält.
ich die Struktur initialisiert und in die Datei wie folgt zu schreiben:
int esprime_write_btree_header(FILE * fp, unsigned int node_size) {
ESPR_REL_HEADER header = {
.version = 1,
.root_node_num = 0,
.node_size = node_size,
.node_count = 1
};
return fwrite(&header, sizeof(ESPR_REL_HEADER), 1, fp);
}
Wo node_size
derzeit 4, während ich Experiment ist.
Die Datei enthält folgende Daten, nachdem ich die Struktur, um es zu schreiben:
-bash$ hexdump test.dat
0000000 01 bf f9 8b 00 00 00 00 04 00 00 00 01 00 00 00
0000010
Ich erwarte, dass es tatsächlich enthalten:
-bash$ hexdump test.dat
0000000 01 00 00 00 00 04 00 00 00 01 00 00 00
0000010
Excuse die newbiness. Ich versuche zu lernen :) Wie schreibe ich effizient nur die Datenkomponenten meiner Struktur in eine Datei?
Danke dafür. Also, kommt es im Grunde darauf an, ein Byte-Array manuell zu erstellen und dieses auf die Festplatte zu schreiben, und wenn ich es dann von der Festplatte herunter lese, die Bytes von diesem Array zurück in die Mitglieder einer neu zugewiesenen Struktur kopieren? Ich lerne gerade wirklich, aber ich möchte das so machen, dass die Datei immer das gleiche Format auf allen Maschinen hat, ja. – d11wtq
@ d11wtq Ja, für die beste Portabilität sollten Sie 'memcpy' verwenden, um die Bytes vom Array zum Member zu kopieren und dann' ntohl' (oder was immer es auch ist) aufzurufen, um die Byte-Reihenfolge zu korrigieren. – Potatoswatter
Ausgezeichnet, danke. Ich habe etwas zu lesen. Es ist schwer, Neuling zu sein :) – d11wtq