Прочитать бит N из байта - PullRequest
       7

Прочитать бит N из байта

0 голосов
/ 14 ноября 2018

Мне нужно прочитать определенный бит из байта.Значение, которое я хочу проверить, равно 0 или 1.

unsigned char Buffer[0]=2; 
//or binary 0b00000010

Как я могу прочитать n бит из буфера.Если это 0 или 1?Пример, если 7 бит из байта равен 0 или 1

Ответы [ 5 ]

0 голосов
/ 14 ноября 2018

Чтобы ответить на ваш вопрос: который проверит значение 7-го бита.

unsigned char Buffer = 2; //Hope this is what you are looking for 

if (((Buffer >> 7) & 0x01) == 1 )
{
    printf(" Bit is 1 ");
} 
else
{
    printf(" Bit is 0 ");
}

Аналогичным образом, если вам нужно проверить значение n-го бита, замените 7 в условии if на n.

0 голосов
/ 14 ноября 2018

Чтобы проверить бит, равен ли он 0 или 1, вы можете определить простой макрос, например:

#define BIT_ISSET(var, pos) (!!((var) & (1ULL<<(pos))))

, а затем использовать его в предложениях if.

Обратите внимание на оператор ' !! ', чтобы убедиться, что он возвращает 0 или 1.

0 голосов
/ 14 ноября 2018

Конечно, вам нужно было заранее определить битовую позицию.

, например
Бит7 (MSB)
Бит0 (LSB)

Тест для бита 7:

if (Buffer[0] & 0x80)
{
    //do action for bit 7 = 1
}
else
{
    // do action for bit7 = 0
}
0 голосов
/ 14 ноября 2018

Вы можете просто использовать эту функцию, чтобы передать свой символ и N (число бит). Функция будет вызывать побитовое И отфильтровывать бит, который вы должны проверить.

bool check_N_bit(char a_char , int N)
{
    if (N>8)
    {
        return false;
    }
    if ((a_char&(0x01 << N-1)) > 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
0 голосов
/ 14 ноября 2018

Вы должны точно определить, как считать биты:

  • начиная с 0 или 1
  • от наименее значимого к наиболее значимому или иным способом?

Предполагая, что бит 0 является наименее значимым, вы можете получить бит 7 с этим выражением:

int bit7 = ((unsigned char)Buffer[0] >> 7) & 1;

Вот общий цикл:

for (int i = 7; i >= 0; i--) {
    putchar('0' + (((unsigned char)Buffer[0] >> i) & 1));
}
...