开发者

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

开发者 https://www.devze.com 2023-03-03 18:51 出处:网络
I am trying to send data from a java client to a c# server and having trouble converting int to byte array.

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); 
retur开发者_StackOverflown 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.

0

精彩评论

暂无评论...
验证码 换一张
取 消