Вопрос

Я пытаюсь преобразовать 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top