Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

different results when converting int to byte array - .NET vs Java

Tags:

java

c#

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.

like image 200
Idan Avatar asked May 06 '11 23:05

Idan


1 Answers

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.

like image 88
manojlds Avatar answered Oct 03 '22 10:10

manojlds