лучший способ поменять байты в int в java

17

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

    
задан DEACTIVATIONPRESCRIPTION.NET 27.06.2010 в 19:18
источник

2 ответа

42

Вы можете использовать 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 bitsRev = (byte) (Integer.reverse(aByte) >>> (Integer.SIZE - Byte.SIZE));

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

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

См. также

ответ дан polygenelubricants 27.06.2010 в 19:19
0

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

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

    
ответ дан yerlilbilgin 19.04.2016 в 08:11