Wie kann ich das schreiben in einen Puffer (void-Zeiger)?
Ich schreiben möchte in 2 chars und ein bit-Vektor (uint64_t) in einer Datei, sondern ich muss zuerst schreiben Sie alles in einen Puffer. Dann wird der Puffer in die Datei geschrieben werden. Wie soll ich schreiben, diese 3 Variablen in einen Puffer (void-Zeiger), so dass alles enthalten sein kann, innerhalb eines (void-Zeiger) der variable.
Z.B. ich will schreiben
char a = 'a';
char b = 'b';
uint64_t c = 0x0000111100001111;
in
void *buffer = malloc(sizeof(char)*2+sizeof(uint64_t));
Dann schreiben, dass in eine Datei mit
write(fd, buffer, sizeof(char)*2+sizeof(uint64_t));
Warum haben Sie das tun?!
Könnte man umwandeln, hex in ein char-array, und legen Sie dann alle Daten in ein char-array.
Könnte man umwandeln, hex in ein char-array, und legen Sie dann alle Daten in ein char-array.
InformationsquelleAutor Kobi | 2012-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist die (fast*) vollkommen sichere Weise, es zu tun:
Könnten Sie versucht sein, etwas zu tun, wie
*(uint64_t *)(buffer + 2) = c;
aber das ist nicht tragbar aufgrund der Ausrichtung Einschränkungen.Beachten Sie, dass
sizeof(char) == 1
per definition in der C-standard.(*) Ich bin davon ausgegangen 8-bit -
char
, die fast, aber nicht ganz universell; auf einer Plattform mit 16-bit -char
verwendenmemcpy
füra
undb
als gut.Wenn Sie
char
stattuint8_t
, wird es nicht portabel sein?Ich denke, wenn du schreiben
(uint64_t *)(buffer + 2) = c;
du meinst entweder*(uint64_t *)(buffer + 2) = c;
oder(uint64_t *)(buffer + 2)[0] = c;
in der Tat. Danke, korrigiert die Antwort.
InformationsquelleAutor Fred Foo
Gut, können Sie immer legen Sie die Daten in einen Puffer wie diesen:
Oder memcpy verwenden wie cnicutar schlägt. Allerdings würde ich denken, dass es viel einfacher und weniger fehleranfällig, schreiben Sie einfach jedes element, um die Datei zu einem Zeitpunkt:
Hüten Sie sich vor endian Probleme.
InformationsquelleAutor harald