I am trying to send data from a java client to a c# server and having trouble converting int to byte array.
when i am converting the number 8342 with c# using this code:
BitConverter.GetBytes(8342)
the result is: x[4] = { 150, 32, 0, 0 }
with java i use:
ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt(8342);
return bb.array();
and here the result is: x[4] = { 0, 0, 32, -106 }
Can someone explain? I am new to java and this is the first time i see negative numbers in byte arrays.
You have to change endianess:
bb.order(ByteOrder.LITTLE_ENDIAN)
Java stores things internally as Big Endian, while .NET is Little Endian by default.
Also there is difference in signed and unsigned between Java and .NET. Java uses signed bytes, C# uses unsigned. You will have to change that as well.
Basically, that is why you are seeing -106 ( 150 - 256 )
You will have to do something like the utility method below:
public static void putUnsignedInt (ByteBuffer bb, long value)
{
bb.putInt ((int)(value & 0xffffffffL));
}
Note that value is long.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With