Hej, I java är en byte signed som default och eftersom 144 > 127 så får du ett negativt tal. Aha, tack för det! Ska undersöka =) Snacka om korkat: JAVA har ENDAST signed bytes, inte unsigned bytes! Du kan läsa om hur man konverterar från byte[] (där de egentligen är unsigned byte) till integers här : http://www.petefreitag.com/item/183.cfm.Skicka byte array från C# app to Java app: Fel vid mottagning hos JAVA
jag har en kort enkel byte[] som skickas från ett C# program och ska tas emot av ett JAVA-program. Det fungerar för data som inte är större än 1 byte, t ex:
byte[] firstSend = new byte[9];
firstSend[0] = 1;
firstSend[1] = 4; |
firstSend[2] = 0; | Int32 (4 bytes) där värdet är 4.
firstSend[3] = 0; |
firstSend[4] = 0; |
firstSend[5] = 0; |
firstSend[6] = 0; | Int32 (4 bytes) där värdet är 0
firstSend[7] = 0; |
firstSend[8] = 0; |
Denna array kommer tas emot fint och tolkas rätt på JAVA-sidan där jag tar ut:
byte type = firstSend[0];
int dataSize = enMetodSomTarUtIntUrEnArray(firstSend, 1);
byte data = ... yada yada (0 bytes)
Än så länga inga problem. Men om jag istället för att skicka in 4 tomma bytes ("data") så skickar jag in ett värde av 400 såhär:
byte[] firstSend = new byte[9];
firstSend[0] = 1;
firstSend[1] = 4; |
firstSend[2] = 0; | Int32 (4 bytes) där värdet är 4 (4 bytes data alltså)
firstSend[3] = 0; |
firstSend[4] = 0; |
firstSend[5] = 144 |
firstSend[6] = 1; | Int32 (4 bytes) där värdet är 400 (144 + 256 = 400)
firstSend[7] = 0; |
firstSend[8] = 0; |
När denna tas emot på JAVA sidan ser den ut såhär:
byte[] firstSend = new byte[9];
firstSend[0] = 1;
firstSend[1] = 4; |
firstSend[2] = 0; | Int32 (4 bytes) där värdet är 4 (4 bytes data alltså)
firstSend[3] = 0; |
firstSend[4] = 0; |
firstSend[5] = -112 |
firstSend[6] = 1; |
firstSend[7] = 0; |
firstSend[8] = 0; |
Jag har INGEN aning om varför. Ideér?Sv: Skicka byte array från C# app to Java app: Fel vid mottagning hos JAVA
Sv:Skicka byte array från C# app to Java app: Fel vid mottagning hos JAVA
Sv: Skicka byte array från C# app to Java app: Fel vid mottagning hos JAVA
Komplett vansinne får man ju säga... Det finns såklart extremt kladdiga omvägar... *suck*
LÄnge leve C# säger jag bara...Sv:Skicka byte array från C# app to Java app: Fel vid mottagning hos JAVA
Jobbigt och stökigt, men det går relativt enkelt om man kapslar in det in en metode eller två.
/Andreas