Какой лучший способ изменить порядок 4 байтов в int в java??
Лучший способ обратного байта в int в java
Ответ 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 наименее значимого байта к результату.