我正在用C#编写一段代码(我对Java相当陌生)。以下是C#中的代码和示例。将C#代码迁移到Java,无符号短和字节数组转换
ushort number = 0xAABB; // 43707
byte[] data = new byte[2];
EndianBitConverter.Big.CopyBytes(number, data, 0); // value[0] = 170, value[1] = 187
我在.NET中使用自定义bit convrter,因为它默认为little endian。无论如何,从我对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等做同样的事情,所以我需要正确理解这一点。
谢谢你,我没想到为sbyte,这就是我所需要的。 –
我觉得有点尴尬,但它服务于我:) –
这是好的,它发生在我们所有人。在C#编程几年之后,有一天我学会了“??”的存在,运营商。 –