Как я могу превратить int в три байта в Java?
-
06-07-2019 - |
Вопрос
Я пытаюсь преобразовать int
на три bytes
представляя это int
(с прямым порядком байтов).
Я уверен, что это как-то связано с побитовым сдвигом и битовым сдвигом.Но я понятия не имею, как это сделать.
Например:
int myInt;
// some code
byte b1, b2 , b3; // b1 is most significant, then b2 then b3.
*Обратите внимание: я знаю, что int имеет размер 4 байта, и у трех байтов есть вероятность переполнения/недополнения.
Решение
Чтобы получить наименее значащий байт:
b3 = myInt & 0xFF;
Второй наименее значимый байт:
b2 = (myInt >> 8) & 0xFF;
И третий наименее значащий байт:
b1 = (myInt >> 16) & 0xFF;
Объяснение:
Побитовое И для значения с 0xFF (11111111 в двоичном формате) вернет младшие 8 бит (биты от 0 до 7) в этом числе.Сдвиг числа вправо 8 раз помещает биты с 8 по 15 в позиции битов от 0 до 7, поэтому операция AND с 0xFF вернет второй байт.Аналогично, сдвиг числа вправо 16 раз помещает биты с 16 по 23 в позиции битов от 0 до 7, поэтому операция AND с 0xFF возвращает третий байт.
Другие советы
byte b1 = (myint >> 16) & 0xff;
byte b2 = (myint >> 8) & 0xff;
byte b3 = myint & 0xff;
Я не уверен, как этот holfds в Java, хотя я не Java-разработчик
Int не помещается в 3 байта. Однако предположим, что вы знаете, что именно это делают:
byte b1 = (myInt & 0xff);
myInt >>= 8;
byte b2 = (myInt & 0xff);
myInt >>= 8;
byte b3 = (myInt & 0xff);
В Java
int myInt = 1;
byte b1,b2,b3;
b3 = (byte)(myInt & 0xFF);
b2 = (byte)((myInt >> 8) & 0xFF);
b1 = (byte)((myInt >> 16) & 0xFF);
System.out.println(b1+" "+b2+" "+b3);
выводит 0 0 1