Как я могу превратить int в три байта в Java? - PullRequest
2 голосов
/ 09 октября 2008

Я пытаюсь преобразовать int в три bytes, представляющих это int (big endian).

Я уверен, что это как-то связано с побитовым сдвигом. Но я понятия не имею, как это сделать.

Например:

int myInt;

// some code

byte b1, b2 , b3; // b1 is most significant, then b2 then b3.

* Обратите внимание, я знаю, что значение int составляет 4 байта, и три байта могут быть переполнены / переполнены.

Ответы [ 4 ]

14 голосов
/ 09 октября 2008

Чтобы получить младший байт:

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 возвращает 3-й байт.

4 голосов
/ 09 октября 2008
byte b1 = (myint >> 16) & 0xff;
byte b2 = (myint >> 8) & 0xff;
byte b3 = myint & 0xff;

Я не уверен, как этот holfds в Java, хотя, я не Java-разработчик

2 голосов
/ 09 октября 2008

Int не помещается в 3 байта. Тем не менее, предполагая, что вы знаете, что эти конкретные:

   byte b1 = (myInt & 0xff);
   myInt >>= 8;
   byte b2 = (myInt & 0xff);
   myInt >>= 8;
   byte b3 = (myInt & 0xff);
1 голос
/ 30 октября 2009

на 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

...