Hight un low byte in tcp/ip

hallo,
ich habe folgendes programm.
ein c programm schickt Daten mit datentyp short zu einem java programm über socket.
aus dem c programm:

send(ClientSocket,(const char \*) &s\_buffer\_tmp[anzahl],(laenge-anzahl),0);

s_buffer_tmp ist von type unsigned short.

zum lesen der daten aus ja heraus verwende ich inputstream.read(byte[])

auf der java seite kommen die daten als byte strom an. jede zwei benachbarte bytes sind vertauscht. ich muss immer einen swap machen und dann erst nach int konvertieren und das kostet zeit.

das problem liegt nicht an der konvertierungsfunktion
habe zwei varianten getestet.

 public static int byte2tos(byte b0, byte b1) { 
 short temp = 0 ;
 temp = (short)((b0&(short)0x00ff) 

weiss jemand was die ursache können, dass die reihenfolge von jede zwei benachbarten bytes falsch ist ?

Gruss
Youssef

weiss jemand was die ursache können, dass die reihenfolge von
jede zwei benachbarten bytes falsch ist ?

Das liegt daran, dass es verschiedene Architekturen gibt, die unterschiedliche „Endianness“ haben (u.A. little-endian, big-endian oder PDP-endian, wobei PDP wirklich seltsam ist). Die Standard C-Lib stellt für die Wandlung von Daten die Funktionen htonls und ntohls zur Verfügung, ich schlage vor, dass du dir mal die Dokumentation dazu anschaust.

Begründung: http://de.wikipedia.org/wiki/Byte_order

Wirst wohl um die Konvertierung nicht rumkommen (sooo langsam ist das jetzt auch nicht) ausser du konvertierst schon auf Seite des C Programms :wink: ist vielleicht auch nicht so ganz standardkonform aber wenns hilft *G*

Grüße
Bruno

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]