我需要从字节中读取特定的位。我要测试的值为0或1。
unsigned char Buffer[0]=2;
//or binary 0b00000010
如何从缓冲区读取n位。是0还是1? 例如,从字节开始的7位是0还是1
答案 0 :(得分:7)
您必须精确定义位数:
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));
}
答案 1 :(得分:2)
要检查其0还是1,可以定义一个简单的宏,例如:
#define BIT_ISSET(var, pos) (!!((var) & (1ULL<<(pos))))
然后在if子句中使用它。
请注意“ !! ”运算符,以确保其返回0或1。
答案 2 :(得分:1)
回答您的问题:将检查第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位的值的类似方法,则将if条件中的7替换为n。
答案 3 :(得分:0)
当然,您必须预先定义您的钻头位置。
例如
Bit7(MSB)
Bit0(LSB)
测试第7位:
if (Buffer[0] & 0x80)
{
//do action for bit 7 = 1
}
else
{
// do action for bit7 = 0
}
答案 4 :(得分:0)
您可以仅使用此函数传递char和N(位数)。该函数将按位调用AND滤除您需要检查的位。
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;
}
}
答案 5 :(得分:0)
这里是一个从 x 中得到 n 位的函数
int getBit(unsigned int x, int n){
return (x >> (n-1)) & 0x01;
}