gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:21 25 4
gpt4 key购买 nike

我正在尝试将数据从 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));
}

注意值是长的。

关于c# - 将 int 转换为字节数组时的不同结果 - .NET 与 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5918133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com