gpt4 book ai didi

java - 将C#代码迁移到Java,unsigned short和字节数组转换

转载 作者:搜寻专家 更新时间:2023-11-01 01:46:32 25 4
gpt4 key购买 nike

我正在用 Java 编写一段代码(我对 Java 还很陌生),而我之前是用 C# 编写的。这是 C# 中的代码和示例。

ushort number = 0xAABB; // 43707
byte[] data = new byte[2];
EndianBitConverter.Big.CopyBytes(number, data, 0); // value[0] = 170, value[1] = 187

我在 .NET 中使用自定义位转换器,因为它默认为小端。无论如何,根据我对 java 的了解,如果我想使用与 byte[] 相同的结果,我应该期望我的值(170 和 187)小 128(Byte.MAX_VALUE + 1),即(42、59) - 由于 .net 和 java 的字节类型范围不同。这是我用 Java 编写的代码以模仿我的上述逻辑。

public class Ushort {
private int value = 0;

public Ushort(int i) {
value = i - (Short.MAX_VALUE + 1);
}

public int get() {
return value;
}

public byte[] getBytes() {
byte[] result = new byte[]{
(byte) (value >>> 24),
(byte) (value >>> 16),
(byte) (value >>> 8),
(byte) value};

return new byte[]{result[2], result[3]};
}
}

但是当我用

调用上面的代码时
new Ushort(0xAABB).getBytes()

结果是 [42, -69] 而不是 [42, 59]。最后一个字节比应有的小了 128。我真的需要一些关于如何正确执行此操作以及我的逻辑是否正确的指示。我还需要为 uint、ulong 等做同样的事情,所以我需要正确理解这一点。

最佳答案

要么我不明白你试图做的转换背后的原因,要么他们的想法是错误的,这意味着我不能对他们的实现是否有错误发表意见。

Java 中的 byte 类型与 C# 中的 sbyte 类型完全相同,因此您可以使用 sbyte 在 C# 中进行所有测试> 并确保在移植到 Java 之前一切正常。

(byte)0xaa = 170
(sbyte)0xaa = -86
(byte)0xbb = 187
(sbyte)0xbb = -69

因此,在 Java 中,您的字节数组应该是 { -86, -69 }。

关于java - 将C#代码迁移到Java,unsigned short和字节数组转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8313899/

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