Как преобразовать шестнадцатеричное значение более 256 в два байта - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь сохранить шестнадцатеричное значение больше 255 (без знака) в два байта.Ниже приведен пример кода:

public class Test {
    public static void main(String[] args) {
        byte b = (byte)0x12c; // output : 44
        System.out.println(b);
    }
}

Пример. Когда я преобразую 300 в шестнадцатеричный код, это будет 12с, что должно быть уменьшено до (44, 1) в байтах.почему java экономит 44 в первом байте?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Вам нужно сохранить свое значение в больший тип данных (long или int), а затем взять только первые 16 незначимых битов

int raw = (int)0x12c;
int masked = raw & 0x00ff
System.out.println(masked);
0 голосов
/ 18 апреля 2019
byte[] bytes = new byte[2];
ByteBuffer bbuf = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN):
bbuf.putShort((short) 0x12c);

byte[] bytes = new byte[4];
ByteBuffer bbuf = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN):
bbuf.putInt(0x12c);

System.out.println(Arrays.toString(bytes));

Или вы делаете свои вычисления самостоятельно.

Здесь мы создаем два байта, которые мы хотим, оборачиваем ByteBuffer вокруг него, чтобы мы могли читать и записывать несколько числовых примитивных типов.Вы хотите порядок байтов в младшем порядке (сначала 2c).

...