我正在使用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默认为小端序,我在.NET中使用自定义位转换器。无论如何,根据我对Java的了解,如果我想要与byte[]相同的结果,则应该期望我的值(170和187)比128(Byte.MAX_VALUE + 1)小,即(42,59)-因为.NET和Java具有不同的byte类型范围。以下是我在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等执行相同的操作,因此我需要正确理解这一点。