我正在尝试将数据从java客户端发送到c#服务器,并且无法将int转换为字节数组。
当我使用此代码使用c#转换数字8342时:
BitConverter.GetBytes(8342)
结果是:x [4] = {150,32,0,0}
使用java我使用:
ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt(8342);
return bb.array();
,结果是:x [4] = {0,0,32,-106}
有人可以解释一下吗?我是java新手,这是我第一次在字节数组中看到负数。
答案 0 :(得分:9)
你必须改变结束:
bb.order(ByteOrder.LITTLE_ENDIAN)
Java将内部存储为Big Endian,而默认情况下.NET为Little Endian。
Java和.NET之间的签名和无符号也有区别。 Java使用带符号的字节,C#使用无符号。你也必须改变它。
基本上,这就是你看到-106(150 - 256)
的原因您必须执行以下实用程序方法:
public static void putUnsignedInt (ByteBuffer bb, long value)
{
bb.putInt ((int)(value & 0xffffffffL));
}
请注意,值很长。