Лучший способ обратить байты в INT в Java - PullRequest
19 голосов
/ 27 июня 2010

Какой лучший способ изменить порядок 4 байтов в int в Java ??

Ответы [ 2 ]

44 голосов
/ 27 июня 2010

Вы можете использовать Integer.reverseBytes:

int numBytesReversed = Integer.reverseBytes(num);

Также есть Integer.reverse, который инвертирует каждый бит int

int numBitsReversed = Integer.reverse(num);

java.lang.Integer API ссылки

  • public static int reverseBytes(int i)
    • Возвращает значение, полученное путем изменения порядка следования байтов в представлении дополнения до двух указанных значений типа int.
  • public static int reverse(int i)
    • Возвращает значение, полученное путем изменения порядка битов в двоичном представлении дополнения до двух указанных значений int.

Решение для других примитивных типов

Существуют также некоторые версии Long, Character и Short вышеуказанных методов, но некоторые из них отсутствуют, например. Byte.reverse. Вы все еще можете делать такие вещи:

byte bitsRev = (byte) (Integer.reverse(aByte) >>> (Integer.SIZE - Byte.SIZE));

Вышеприведенное обращает вспять биты byte aByte, переводя его в int и обращая его, а затем сдвигая вправо на соответствующее расстояние и, наконец, возвращая его к byte.

Если вы хотите манипулировать битами float или double, есть Float.floatToIntBits и Double.doubleToLongBits, которые вы можете использовать.

Смотри также

0 голосов
/ 19 апреля 2016

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

int reverse(int a){
   int r = 0x0FF & a;
   r <<= 8; a >>= 8;
   r |= 0x0FF & a;
   r <<= 8; a >>= 8;
   r |= 0x0FF & a;
   r <<= 8; a >>= 8;
   r |= 0x0FF & a;
   return r;
}

, смещение ввода вправо, вывод влево на 8 бит каждый раз и ИЛИ - младший байт результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...