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
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.
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
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.
Muss leider mein Programm so anpassen dass der PowerPC mit den Nachrichten was anfangen kann, nicht andersherum...
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.