我正在用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#編程幾年之後,有一天我學會了「??」的存在,運營商。 –