Как узнать значение битов в массиве байт?

446
16 июня 2017, 08:32

Есть массив байт byte[10]. В одном из элементов массива находится байт, биты которого содержат информацию об успешном/неудачном исходе операции. Другими словами, требуется определить второй бит (если считать слева) в байте. Как это можно сделать? С побитовыми операция знаком слабо, но после ознакомления с этой темой, всё равно не нашёл ответа на свой вопрос. Подскажите как это сделать или дайте пример

Answer 1
byte b;
//blah-blah
if((b & 2) > 0)
   System.out.println("Bingo! Operation is successful");
else
   System.out.println("Sorry, operation failed...");
Answer 2

Как проверить бит в байте побитовой операцией уже написал @Barmaley.

Для упрощения побитовых операций можно использовать BitSet:

byte[] arr = new byte[10];
//инициализация arr
BitSet bits = BitSet.valueOf(arr);
if(bits.get(2)) { //2 - номер бита во всем массиве байтов
     //действие
}

Если остальные байты не разбираются можно передать массив из одного байта:

BitSet bits = BitSet.valueOf(new byte[]{ arr[x]});
Answer 3

Хотя ответ default locale мне нравиться больше, так как он более читабельный неопытному юзеру, я опишу еще две возможности оперировать с побитовыми операциями.

1) 2 бит слева это 7 бит если считать со стороны наименьшего значащаго бита(справа). Лучше практикой считаеться указывать именно положения бита слева. Шифтим (сдвигаем) наш байт направо на 6 значений. Делаем "& 1" тем самым обнуляем все значения левее самого правого бита. Этот код дает нам значение нужного бита. ссылка

(my_byte >> 6) & 1;

2) Делаем логическую операцию "И" с маской 01000000 (что в десятичной форме равно 64) и проверяем равенство её нулю. Тем самым все значения кроме 7 бита будут аннулированы, а 7 оставит свое значение. Т.е. если он был ноль, то все чило будет 0, если было один, то число будет больше 0 (а именно 64).

(my_byte & 64) > 0;
READ ALSO
Система ролей вместе с JWT

Система ролей вместе с JWT

У меня в базе имеются таблицы аккаунты и ролиЯ хотел бы проверять возможность пользователя с определенной ролью получать необходимый контент

495
Встраивание groovy в java. Безопасность

Встраивание groovy в java. Безопасность

Как безопасно встроить groovy скрипт в java? ПояснюДопустим я подгружаю какой-то скрипт динамически в java

323