我试图将数据从java客户端发送到c#服务器,但在将整数转换为字节数组时遇到了问题。
当我使用下面的代码用c#转换数字8342时:
BitConverter.GetBytes(8342)结果是: x4 ={ 150,32,0,0}
对于java,我使用:
ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt(8342);
return bb.array();这里的结果是: x4 ={ 0,0,32,-106 }
有人能解释一下吗?我是java的新手,这是我第一次在字节数组中看到负数。
发布于 2011-05-07 07:59:58
您必须更改字节顺序:
bb.order(ByteOrder.LITTLE_ENDIAN)Java在内部以高字节顺序存储内容,而.NET默认情况下是低字节顺序。
Java和.NET在有符号和无符号方面也有区别,Java使用有符号字节,C#使用无符号字节。你也必须改变这一点。
基本上,这就是为什么你会看到-106 ( 150 - 256 )
您必须执行类似下面的实用程序方法的操作:
public static void putUnsignedInt (ByteBuffer bb, long value)
{
bb.putInt ((int)(value & 0xffffffffL));
}请注意,值是long。
https://stackoverflow.com/questions/5918133
复制相似问题