2015-08-17 5 views
1

У меня есть массив из 8 булевых элементов, которые я хочу просто преобразовать в байт. Есть ли простой способ сделать это? Или мне нужно использовать для цикла?Java simple boolean [] to byte conversion

Лично я предпочел бы простое решение до двух строк, если оно существует.

Спасибо за помощь.

EDIT: Возможный дубликат - это всего лишь один булевский байт, у меня есть массив.

ДРУГОЙ РЕДАКТИРОВАНИЕ: Я получаю байт из пакета udp, тогда я устанавливаю первый бит (логический) на false, тогда мне нужно будет снова получить байт.

+0

возможно дубликат [конвертировать из булева в байт Java] (http://stackoverflow.com/questions/25360375/convert-from-boolean-to-byte-in-java) – Kiki

+1

Этот вопрос просто от одного булева до байта, у меня есть целый массив. – grizeldi

+0

Итак, перебираем массив. Мы могли бы быть более полезными, если вы сообщите нам, что вы пробовали до сих пор. – Kiki

ответ

6

Я думаю, что петля лучше, но если вы должны иметь один подкрылок:

byte b = (byte)((bool[0]?1<<7:0) + (bool[1]?1<<6:0) + (bool[2]?1<<5:0) + 
       (bool[3]?1<<4:0) + (bool[4]?1<<3:0) + (bool[5]?1<<2:0) + 
       (bool[6]?1<<1:0) + (bool[7]?1:0)); 

Для входа:

boolean[] bool = new boolean[] {false,false,true,false,true,false,true,false}; 

вы получаете байте 42.

+0

Это последний bool [1] там по какой-то причине или должно быть bool [7]? – grizeldi

+0

@grizeldi Спасибо, это была ошибка копирования и вставки :) – Eran

+0

Протестировано и, кажется, работает, thx. – grizeldi

1

, если я правильно понял ваш вопрос, тогда вы хотите преобразовать байт, который представлен его битовым шаблоном в виде массива булевых ... , если это так, то это одно из решений:

public static void main(String[] args) { 
     // The integer where the result will be build up 
     int result = 0; 
     // The bit-pattern as an array of booleans 
     // 2^0 Position is at bools[0] !! 
     // so this is the byte '0 1 0 1 0 1 0 1' --> decimal : 85 
     boolean[] bools = new boolean[]{ true, false, true, false, true, false, true, false }; 
     // iterate through the 'bits' 
     // and set the corresponding position in the result to '1' if the 'bit' is set 
     for (int i = 0; i < bools.length; i++) { 
      if (bools[i]) { 
       result |= 1 << i; 
      } 
     } 
     System.out.println(result); // Prints '85' 
    } 
+0

Да, я хотел что-то вроде этого, но @ Eran's oneliner - это то, что я сейчас использую. – grizeldi

0

Я бы так хотел, три линии.

byte b = 0; 
for(int i=0;i<8;i++) if(binaryValues[i]) b |= (128 >> i); 
return b;