Подтвердить что ты не робот

Лучший способ обратного байта в int в java

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

4b9b3361

Ответ 1

Вы можете использовать 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, который вы можете использовать.

См. также

Ответ 2

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

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 бит каждый раз и OR'ing наименее значимого байта к результату.