Я пишу кусок кода на 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 и так далее, поэтому мне нужно правильно это понять.