Ich weiß, dass Strukturen in C nicht Speicher angelegt werden können, wie sie im Code sind. Zum Beispiel:Lesen und Schreiben von Strukturen in C
struct a {
short x;
int y;
};
unter der Annahme, 2-Byte-Kurzschlüsse und 4-Byte-Ganzzahlen, nehmen tatsächlich 8 Bytes im Speicher kann als der Compiler die Mitglieder auf 4 Bytegrenzen auszurichten will ... so gibt es 2 Byte slack zwischen x und y.
Dies macht das Lesen und Schreiben von Strukturen über Sprache, Compiler und Hardware nicht portierbar. Die einzige Möglichkeit, sie zu lesen und zu schreiben, ist Mitglied für Mitglied. Ja, Endianness ist auch hier ein Problem und der Austausch muss auf der Mitgliederebene erfolgen, aber nehmen wir an, dies ist kein Problem.
Fortran verfügt über einen 'Sequenz'-Spezifizierer für abgeleitete Typen (Strukturen), der dem Compiler mitteilt, die Elemente im Speicher so anzuordnen, wie sie angegeben sind. Dies ermöglicht das Lesen und Schreiben von abgeleiteten Typen.
Meine Frage ist: Gibt es eine Möglichkeit, eine ähnliche Sache in C auf eine tragbare (und wartbare) Weise zu tun?
Die meisten Compiler haben Anweisungen zu * pack * -Strukturen, so dass sie andere (oder keine) Abstände zwischen den Elementen haben können. Eine schnelle Suche sollte Ihnen helfen, das zu finden, was Sie für Ihren Compiler benötigen. Das Endanfälligkeitsproblem ist jedoch nicht so leicht zu überwinden, aber wenn Sie nur eine einzelne Hardware-Plattform als Ziel haben, sollten Sie in Ordnung sein. –
@JoachimPileborg oder fügen Sie eine BOM wie ein int '0xffffeeff' hinzu und fügen ein Byte-Swapping bei der Eingabe hinzu, je nachdem, wo der' ee' Satz –
Serialize und Deserialize to Text ist und jedes Problem mit Endiannes, Packing und Portabilität vermeidet. – edc65