Forum: PC-Programmierung Byte Order Intel/PowerPc


von Julian (Gast)


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

von Uhu U. (uhu)


Lesenswert?

Verschickst du Binärdaten? Wenn ja, solltest du wirklich gute Gründe 
dafür haben, denn generell ist das keine sonderlich gute Idee, wie die 
Erfahrung zeigt.

Bei Übermittlung einer Textdarstellung hättest du das Problem nicht.

von Julian (Gast)


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

von Uhu U. (uhu)


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.

von Julian (Gast)


Lesenswert?

Muss leider mein Programm so anpassen dass der PowerPC mit den 
Nachrichten was anfangen kann, nicht andersherum...

von Uhu U. (uhu)


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.

von Gast (Gast)


Lesenswert?


von Julian (Gast)


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

von Karl H. (kbuchegg)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.