hight un low byte in tcp/ip

Von: , Frage gestellt am Do, 24. Mär 2005

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)   << 8);
temp = (short)(temp+ (b1&(short)0x00ff)) ;
return temp;
}
private static int ByteToInt(byte b0, byte b1)
{
int ret = 0;
if(b0<0)
ret = (int)(char)(b0+256)*256;
else
ret = (int)(char)b0*256;
if(b1<0)
ret += b1+256;
else
ret += b1;
return  ret;
}


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

Gruss
Youssef

2 Antworten zu dieser Frage

  1. Antwort von nach 13 Minuten 0 hilfreich
    Re: hight un low byte in tcp/ip

    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 hton[ls]() und ntoh[ls]() zur Verfügung, ich schlage vor, dass du dir mal die Dokumentation dazu anschaust.

  2. Antwort von nach 8 Tagen 0 hilfreich
    Re: hight un low byte in tcp/ip

    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 ;) ist vielleicht auch nicht so ganz standardkonform aber wenns hilft *G*

    Grüße
    Bruno [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!