2013-04-26 62 views
0

我試圖解碼別人的字節數組,我被堵在這一部分:這個二進制文檔是什麼意思?

&lt state &gt ::= "01" <i>(2 bits) for A</i> 
        "10" <i>(2 bits) for B</i> 
        "11" <i>(2 bits) for C</i> 

我覺得這要我來看看下一個字節的最後的2位。這是否意味着字節的最小或最有效數字?我想如果它意味着最不重要的話,我會丟掉最後的6位?

我發現尋找一個字節的位驗證碼:

for (int i = 0; i < byteArray.Length; i++) 
{ 
    byte b = byteArray[i]; 
    byte mask = 0x01; 
    for (int j = 0; j < 8; j++) 
    { 
     bool value = b & mask; 
     mask << 1; 
    } 
} 

能有人這是什麼不正是擴大?

+0

「mask << 1;」不做任何事 – Kyurem 2013-04-26 16:58:38

+0

'bool value = b & mask;'不做任何事,因爲'value'的作用域被限制在for塊並且從未被使用過。應該顯示編譯時間警告... – Lucas 2013-04-26 17:00:29

回答

1

只給你一個開始:

要提取一個字節的各個位,可以使用「&」,稱爲按位與操作。按位和操作意味着「保留所有設置在兩側的位」。例如。當你計算按位和兩個字節時,例如00000011 & 00000010,則結果爲00000010,因爲只有位於倒數第二位的位被設置在兩側。

在Java編程語言,同樣的例子是這樣的:

int a = 3; 
int b = 2; 
int bitwiseAndResult = a & b; // bitwiseAndResult will be equal to 2 after this 

我們檢查,如果一些INT的第n個比特設置,你可以這樣做:

int intToExamine = ...; 
if ((intToExamine >> n)) & 1 != 0) { 
    // here we know that the n'th bit was set 
} 

>>被稱爲bitshift運算符。它簡單地將位從左向右移位,如下所示:00011010 >> 2將得到結果00000110.

所以從上面可以看出,爲了提取某個值的第n位,您首先要將(注意第一位是位0,而不是位1),然後使用按位和運算符(&)僅保留位0.

下面是一些簡單的示例按位和移位運算符: http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm