2013-04-26 3 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

+0

'bool value = b & mask;' ничего не делает, поскольку 'value' привязан к блоку for и никогда не используется. должен показывать предупреждение о времени компиляции ... – Lucas

ответ

1

Просто чтобы дать вам старт:

Для извлечения отдельных битов байта, вы используете «&», называется побитовое и оператора. Побитовое и операционное средство «сохраняют все биты, которые устанавливаются с обеих сторон». Например. при вычислении поразрядного и двух байтов, например. 00000011 & 00000010, то результатом будет 00000010, поскольку только бит во втором последнем положении устанавливается с обеих сторон.

В языке программирования Java, тот же самый пример выглядит следующим образом:

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

Теперь рассмотрим, если n-й бит некоторого междунар установлен, вы можете сделать это:

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

>> называется оператором битдвига. Он просто сдвигает биты слева направо, например: 00011010 >> 2 будет иметь результат 00000110.

Итак, из вышесказанного вы можете увидеть, что для извлечения n-го бита какого-то значения вы сначала меняете n'th бит в позицию 0 (обратите внимание, что первый бит бит 0, а не бит 1), а затем вы используете побитовый и оператор (&), чтобы сохранить только этот бит.

Вот несколько простых примеров операторы побитового и битового сдвига: http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm

Смежные вопросы