2014-02-19 100 views
3

我正在嘗試編寫一個傳輸4字節流的TCP服務器/客戶端程序。一旦客戶端收到4個字節,我就想將每個接收到的字節轉換爲一個布爾值[8]。有沒有辦法做到這一點?我可以成功地將4個字節從服務器傳輸到客戶端,並且客戶端接收的每個字節的值與傳輸到服務器的每個字節的值相匹配。我已經在客戶端寫下的轉換方法中指出了錯誤,該方法被粘貼在下面,如果需要,我可以根據請求發佈更多代碼。有沒有辦法在java中將字節轉換爲布爾數組?

輸入樣例======( - 2 11111110)(-10 11110110)(-2 11111110)(-2 11111110)

實際輸出====( - 2 11111110)(-10 11110110)(-2 11111110)(-2 11111110)

預期輸出==( - 2 11111110)(-10 11110110)(-2 11111110)(-2 11111110)與輸入相同]

public static boolean[] byteToBoolArr(byte x) { 
    boolean[] boolArr = new boolean[8]; 
    boolArr[0] = ((x & 0x01) != 0); 
    boolArr[1] = ((x & 0x02) != 0); 
    boolArr[2] = ((x & 0x04) != 0); 
    boolArr[3] = ((x & 0x08) != 0); 

    boolArr[4] = ((x & 0x16) != 0); 
    boolArr[5] = ((x & 0x32) != 0); 
    boolArr[6] = ((x & 0x64) != 0); 
    boolArr[7] = ((x & 0x128) != 0); 
    return boolArr; 
} 
+2

將來,如果您提供了樣本輸入,預期輸出和實際輸出,這將會非常有用。 –

+0

@JonSkeet謝謝你的提示,我現在編輯我的問題,並記住將來提供這個。 – trawww

回答

5

您正在使用0x指定十六進制值,但是您繼續使用十進制數字。 0x08恰好是8,但0x16不是16。嘗試

boolArr[4] = ((x & 0x10) != 0); 
boolArr[5] = ((x & 0x20) != 0); 
boolArr[6] = ((x & 0x40) != 0); 
boolArr[7] = ((x & 0x80) != 0); 
+0

這個工程!謝謝@rgettman – trawww

1

其實,有一個非常美麗的方式來做到這一點。

public static boolean[] byteToBoolArr(byte b) { 
    boolean boolArr[] = new boolean[8]; 
    for(int i=0;i<8;i++) boolArr[i] = (b & (byte)(128/Math.pow(2, i))) != 0; 
    return boolArr; 
} 
相關問題