Struct auslesen
-
Hallo Leute,
Habe ein folgendes Struct
struct foo { int a; int b; char c[128]; long d; };
Und nun wollte ich fragen ob ich einfach per memcopy das wie folgt machen kann.
struct foo X; // X irgendwie befüllen char Y[sizeof (struct foo)] memcopy ( Y, &X, sizeof ( struct foo ) );
Und das was ich nun im Y habe würde ich gerne über eine Pipe oder über ein Socket irgend wo hin schicken, und dort wieder per memcopy zusammensetzen. Dort wäre halt genau solch ein Struct vorhanden.
Wäre sowas legitim oder sollte man die Finger von sowas lassen weil es Probleme bei verschiedenen Compilern bzw Betriebssystemen gibt.
-
Auf einem einzigen System, innerhalb der gleichen Exe ist das absolut ok. Aber wenn du es an wer weiß was für eine Maschine schickt mit wer weiß was für einer Architektur, mit einer Exe, die von einem Compiler mit wer weiß was für Einstellungen erstellt wurde: Nein, das kann schiefgehen. Muss aber nicht. Vielleicht weißt du ja, dass in beiden Exen die Datentypen gleiche Breite haben, gleiche gepackt sind und die gleiche Byteordnung haben. Das ist nämlich durchaus öfters gegeben. Dann funktioniert auch das byteweise kopieren.
Falls diese Annahmen nicht gegeben sind, dann ist das Stichwort Serialization. Davon gibt es verschiedene Szenarien, je nachdem wie Effizient oder Aufwändig es sein darf oder wie verschieden die Systeme sein können. Eine (ineffiziente) Simpelmethode wäre, die Daten in menschenlesbarer Form zu verschicken. Menschenlesbare Formate sind auch gut zur Fehlerbehandlung und zum Speichern von Daten, sind aber nicht so toll, wenn es um Performance geht.
Warum eigentlich das temporäre Array, anstatt das Struct direkt zu verschicken bzw. hinein zu schreiben? Der memcpy-Schritt ist doch gar nicht nötig!
-
Danke SeppJ,
hast recht, hatte den Gedanken, dass ich konkret nur ein char-array verschicken kann weil die Funktion das schluckt, aber ich kann es ja einfach casten und gut ist.
Ansonsten danke für die anderen Informationen und Tipps & Schönen Abend noch.