Input/Output Austausch von Bytes zwischen C# und Java

Volrath1987

Mitglied
Lieber Community,

ich habe hier zwei Anwendungen die über eine SocketConnection miteinander kommunizieren. Serverseitig kommt JAVA zum Einsatz und Clientseitig C#. Nun ist mir aber aufgefallen, dass ein byte in C# zwischen 0 - 256 und in Java zwischen -128-128 abgebildet wird. Beim konvertieren der bytes in die Datentypen der jeweiligen Programmiersprache kommt es nun zu einer Fehlinterpretation.

Beispielsweise wird in Java die Zahl (short) 20150 als folgende Bytefolge abgebildet {78, -74}. Schicke ich diese zwei Bytes über den Socket an C# rüber bekomme ich dort {78, 182} und dies wird über den BitConverter.ToInt16 als -18866 dargestellt.

Kann mir eine sagen wie ich die Bytes bzw. konkret die primitiven Datentypen korrekt von Java nach C# und C# nach Java korrekt abbilden kann?

Vielen Dank im voraus!
Euer Volrath
 
Das Problem hier ist, dass Java die Zahl im BigEndian Format speichert, während BitConverter.ToInt16 die Zahl im LittleEndian Format erwartet. Um das zu lösen, kannst du die beiden Bytes einfach vertauschen oder aber du rechnest das selbst um z.B. mit
Java:
int zahl = bytes[0] * 256 + bytes[1] ;
if(zahl >= 0x8000) zahl -= 0x10000;
 

Zurück
Oben