Как прочитать один бит в массиве байтов? - PullRequest
3 голосов
/ 10 августа 2009

Проблема в том, что у меня есть массив байтов с 200 индексами, и я просто хочу проверить, что четвертый бит MyArray [75] равен нулю (0) или единице (1).

byte[] MyArray; //with 200 elements

//check the fourth BIT of  MyArray[75]

Ответы [ 3 ]

8 голосов
/ 10 августа 2009

четвертый бит в элементе 75?

if((MyArray[75] & 8) > 0) // bit is on
else // bit is off

Оператор & позволяет использовать значение в качестве маски.

xxxxxxxx = ?
00001000 = 8 &
----------------
0000?000 = 0 | 8

Вы можете использовать этот метод для сбора любых битовых значений, используя ту же технику.

1   = 00000001
2   = 00000010
4   = 00000100
8   = 00001000
16  = 00010000
32  = 00100000
64  = 01000000
128 = 10000000
4 голосов
/ 10 августа 2009

Что-то вроде:

if ( (MyArray[75] & (1 << 3)) != 0)
{
   // it was a 1
}

Предполагается, что вы имели в виду 4-й бит справа.

И, возможно, вы захотите проверить System.Collections.BitArray, просто чтобы убедиться, что вы не изобретаете велосипед заново.

2 голосов
/ 10 августа 2009
    private bool BitCheck(byte b, int pos)
    {
        return (b & (1 << (pos-1))) > 0;
    }
...