从一个字节中读取 'N' 位
Read 'N' bit from a byte
我需要从一个字节中读取特定位。我要测试的值是 0 或 1。
unsigned char Buffer[0]=2;
//or binary 0b00000010
如何从缓冲区读取 n 位。如果它是 0 或 1?
例如,如果来自字节的 7 位是 0 或 1
您必须准确定义如何计算位数:
- 从
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));
}
当然你得提前定义你的位位置
例如
位 7(最高位)
Bit0 (LSB)
测试第 7 位:
if (Buffer[0] & 0x80)
{
//do action for bit 7 = 1
}
else
{
// do action for bit7 = 0
}
您可以只使用此函数来传递您的 char 和 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 还是 1,您可以定义一个简单的宏,例如:
#define BIT_ISSET(var, pos) (!!((var) & (1ULL<<(pos))))
然后在 if 子句中使用它。
注意'!!'运算符,以确保它returns 0 或 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。
这里是一个从 x 中获取位 n 的函数
int getBit(unsigned int x, int n){
return (x >> (n-1)) & 0x01;
}
我需要从一个字节中读取特定位。我要测试的值是 0 或 1。
unsigned char Buffer[0]=2;
//or binary 0b00000010
如何从缓冲区读取 n 位。如果它是 0 或 1? 例如,如果来自字节的 7 位是 0 或 1
您必须准确定义如何计算位数:
- 从
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));
}
当然你得提前定义你的位位置
例如
位 7(最高位)
Bit0 (LSB)
测试第 7 位:
if (Buffer[0] & 0x80)
{
//do action for bit 7 = 1
}
else
{
// do action for bit7 = 0
}
您可以只使用此函数来传递您的 char 和 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 还是 1,您可以定义一个简单的宏,例如:
#define BIT_ISSET(var, pos) (!!((var) & (1ULL<<(pos))))
然后在 if 子句中使用它。
注意'!!'运算符,以确保它returns 0 或 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。
这里是一个从 x 中获取位 n 的函数
int getBit(unsigned int x, int n){
return (x >> (n-1)) & 0x01;
}