将 int 转换为字节数组时的不同结果 - .NET 与 Java



我正在尝试将数据从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的新手,这是我第一次在字节数组中看到负数。

你必须改变字节序:

 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));
    }

请注意,值很长。

最新更新