Frage

Ich möchte in der Lage sein, vorherzusagen, was in dem resultierenden binären sein wird, wenn ich schreiben in Ada rufen einen Datensatz serialisieren. Weißt du, wo ich das nachschauen kann?

Ich habe einige Legacy-Ada-Software, die eine Binärdatei von Write-ing erzeugt einen Datensatz, und ich brauche ein C ++ Programm zu debuggen, die eine kompatible binäre Datei schreiben soll. Also, ich möchte verstehen, welche Regeln Ada folgt, wenn es einen Datensatz serialisiert, damit ich sicherstellen kann, dass die C ++ Code, um einen funktionell äquivalenten Datensatz erzeugen wird.

War es hilfreich?

Lösung

Wie bereits von anderen erwähnt, ohne weitere Anweisung der Compiler seine eigenen Entscheidungen über Satzaufbau machen. Der beste Ansatz wäre, den ursprünglichen Code zu ändern, um die Aufzeichnung unter Verwendung eines spezifischen Layout zu schreiben. Insbesondere ermöglicht die Rekord Darstellung Klausel der Ada-Programmierer genau angeben, das physikalische Layout für einen Datensatz. In der Tat, sollten Sie überprüfen, um zu sehen, ob der ursprüngliche Code eine dieser für die in Rede stehenden Art hat. Ist dies der Fall, dann würde dies Ihre Frage genau beantworten.

Andere Tipps

Das Format der serialisierten Ausgabe von ‚Write hat absolut nichts mit Darstellung Klauseln zu tun.

Standardmäßig werden die Compiler Ausgabesatz Komponenten ohne Ausrichtung padding in der Reihenfolge, in der sie in der Rekord Erklärung geschrieben ist, ein Übersetzungsschema verwenden, das nicht durch den Standard definiert ist (so können Sie nicht die Interoperabilität zwischen Compiler erhalten ). GNAT (die GCC Ada-Compiler) ausgibt, jede Komponente in einer ganzen Anzahl von Bytes.

Wenn Sie Werte eines Typs streamen möchten etwas anderes Format verwenden, können Sie außer Kraft setzen ‚für die Art schreiben. Als ein ungewöhnliches Beispiel könnten Sie auf XML-Stream.

Im Grunde genommen wird der Compiler die Komponenten Ihrer Datensatztypen neu anordnen, wenn Sie das Pragma PACK oder das Pragma PRESERVE_LAYOUT Befehle mit Datensatztypen verwenden. Auch auf den Compiler-Pad-Objekten, die Ausrichtung der Aufzeichnung Komponenten aufrechtzuerhalten. Komponenten wie folgt vor:

Integer: 8, 16, oder 32-Bit-Zweier-Komplement-Zahlen mit Vorzeichen

Float: 32-Bit-IEEE-Format

Long_Float: 64-Bit-IEEE-Format

Fixed-Point: 8, 16 oder 32 Bit; jedoch kann die Reichweite und Delta angegeben beeinflussen 16 oder 32 sein

Aufzählungen: Integer, in der Regel der erste Element wird durch 0

Boolesche Werte: Enumeration-Objekt, 8 Bit lang, die LSB speichert den Wert: 0 = false, 1 = true

Charaktere: Enumeration-Objekt, 8 Bits lang, ohne Vorzeichen 0 bis 127

Zugriffsarten: 32 Bit, 32-Bit-Wert von 0 bedeutet NULL

Arrays: zusammenhängend in Reihe-Großauftrag gespeichert, Größe hängt von Basistyp. Das Array ist gepolstert alle Elemente, um sicherzustellen, haben die richtige Ausrichtung für ihre Typen.

Die Ada95 Language Reference Manual sagt (Abschnitt 13.13.2):

"Für Elementartypen wird die Darstellung im Hinblick auf den Stromelemente Implementierung definiert. Bei zusammengesetzten Typen, die Schreib- oder Leseattribut für jede Komponente wird in einer kanonischen Ordnung genannt. Die kanonische Reihenfolge der Komponenten letzte Dimension schnellste für eine Variation ist Array und Positions Aggregat, um für einen Datensatz. "

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top