2015-01-16 73 views
0

寫了這個功能:我如何布爾數組轉換爲字節數組

public static boolean[] convertByteArrayToBoolArray(byte[] byteArr) { 

    int numberOfBits = (byteArr.length) * 8; 

    boolean[] boolArr = new boolean[numberOfBits]; 

    int j =0; 

    for(int i=0; i<byteArr.length; i++){ 

     Byte value = byteArr[i]; 

     boolArr[7+j] = ((value & 0x01) != 0); 
     boolArr[6+j] = ((value & 0x02) != 0); 
     boolArr[5+j] = ((value & 0x04) != 0); 
     boolArr[4+j] = ((value & 0x08) != 0); 
     boolArr[3+j] = ((value & 0x10) != 0); 
     boolArr[2+j] = ((value & 0x20) != 0); 
     boolArr[1+j] = ((value & 0x40) != 0); 
     boolArr[0+j] = ((value & 0x80) != 0); 

     j+= 8; 
    } 

    return boolArr; 
} 

我怎麼會去扭轉這種。接收boolean []並返回byte []的函數?

+0

你可能要標記的語言 – RPGillespie

+0

不是布爾只有1個字節? – Shahar

+0

布爾值是一位,一個字節是8位。 – martijnn2008

回答

1

你可以嘗試這樣的事:

private static byte boolsToByte(final boolean[] array, final int start) { 
    byte b = 0; 
    for (int i = 0; i < 8; i++) { 
     if (array[start + i]) 
      b |= 1 << (7 - i); 
    } 
    return b; 
} 

public static byte[] convertBoolArrayToByteArray(boolean[] boolArr) { 
    byte[] byteArr = new byte[boolArr.length/8]; 
    for (int i = 0; i < byteArr.length; i++) 
     byteArr[i] = boolsToByte(boolArr, 8*i); 
    return byteArr; 
} 
相關問題