Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
315 views
Welcome To Ask or Share your Answers For Others

1 Answer

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...