Byte Order Intel/PowerPc

Gast #696232
Lesenswert?

Hallo,

habe fogende Ausgangslage:
Versenden von Nachrichten über UDP zwischen PC (Intel) und PowerPC. 
Programmiersprache ist ADA (bis auf die Socket Funktionen welche in C 
implementiert sind). Der Code im PowerPC ist fest und kann nicht 
verändert werden.

Hierbe ergibt sich folgendes Problem:
Da Intel und PowerPC ja verschiedene Byte Order haben, kommen die Daten 
welche vom PC an den PowerPC gesendet werden, dort in der falschen 
Reihenfolge an.

Mit den Funktionen htonl() und htons() kann man die Byteorder ja in C 
ändern. Jedoch funktioniert dies ja nur richtig wenn es sich um 16 bzw. 
32 Bit Datentypen handelt.  Da ich aber selbst definierte Strukturen 
versenden möchte klappt das so nicht.
Hat jemand einen Rat für mich?
Vielen Dank.

mfg. Julian
Gast #696252
Lesenswert?

Ja, verschicke meine Struktur als Binärdaten, da der Empfänger (PowerPC) 
diese so erwartet.
Der record meiner Struktur sieht zum Beispiel so aus:

for x use
record
G   at   0 range  0 .. 15;
A   at   2 range  8 .. 15;
B   at   4 range  0 .. 15;
C   at   6 range  0 .. 47;
...
D   at  58 range  0 .. 1
E   at  58 range  2 .. 3;
F   at  58 range  4 .. 4;
...
end record


mfg. Julian
#696255
Lesenswert?

Kannst du dir auf dem PowerPC nicht ein Programm schreiben, das - 
ähnlich einem Filter unter Unix - die Daten als Text von der 
Schnittstelle einliest, wandelt und auf eine Pipe ausgibt, aus der das 
Zielprogramm sich die Daten abholt?

Nachtrag: Mach das Wandlungsprogramm so, daß es die Textdaten auf einem 
Socket einliest, wandelt und auf einem anderen ausgibt.
#696296
Lesenswert?

Und wo ist das prinzipielle Problem?

Du kannst doch die Daten vom PC aus als Text z.B. an PowerPC Port 10000 
schicken. Dort lauscht dein Wandlungsprogramm, das die Textform in die 
auf dem PPC benutzte Binärform umwandelt und z.B. auf Port 10001 wieder 
ausgibt.

An 10001 hängt das Programm, auf dessen Quellen du keinen Zugriff hast.

Die andere Richtung geht natürlich auch.
Gast #696933
Lesenswert?

Die im Pdf beschriebene Methode funktioniert aber auch nur wenn die 
verwendeten Datentypen nicht über die Byte/Word/DoubleWord grenzen 
hinausgehen.... Oder sehe ich das falsch?
Danke

mfg.
Julian
#697076
Lesenswert?

Entweder du beschreitest den von Uhu vergegebenen Weg
oder aber du sendest die Bytes genauso wie der PowerPC
das haben will.

Wenn du in einer Struktur mehrere int hast, dann
wirst du wohl jeden int einzeln anpassen müssen.
Auch eine Struktur hat ja eine Feinstruktur (nämlich
die Member aus denen sie aufgebaut ist). Und an dieser
Feinstruktur musst du ansetzen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren