c中如何从一个字节中取出想要的bit

冉航--小虾米 2010-09-08 06:31:01

例如:

1个字节: 101 001 10

101代表了电量,我要将101三位取出来。
001代表信号, 我也要取出来。

总之,取出代表特定含义的位,怎么办。


如何用C实现?




...全文
3613 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qrp_pig 2010-09-09
  • 打赏
  • 举报
回复
喵1:
可以用宏函数,嘿嘿

#define GET_ELECTRIC_TOTAL(x) ( (x & 0xE0) >> 5 )
#define GET_ELECTRIC_SIGNAL(x) ( (x & 0x1C) >> 2 )

void main( )
{
uint32 input_data = 0xa6 ;

printf("%d, %d", GET_ELECTRIC_TOTAL(input_data), GET_ELECTRIC_SIGNAL(input_data) ) ;
}
赵4老师 2010-09-09
  • 打赏
  • 举报
回复
联合+位域
#include <stdio.h>
union B_BF {
unsigned char b;
struct BF {
unsigned int v:2;
unsigned int xh:3;
unsigned int dl:3;
} bf;
} b_bf;
int main() {
b_bf.b=0xa6;//101 001 10
printf("dl,xh,v=%d,%d,%d\n",b_bf.bf.dl,b_bf.bf.xh,b_bf.bf.v);
}
//dl,xh,v=5,1,2
canshui 2010-09-09
  • 打赏
  • 举报
回复
位操作……

想简单点的话,开始时就用位域存储
struct {
unsigned eltc:3; //电量,三位
unsigned sign:3; //信号,三位
}pack;
wjb_yd 2010-09-09
  • 打赏
  • 举报
回复

int GetNBitOf(int num, int bit)
{
if ((1 << bit) & num > 0)
return 1;
return 0;
}
yilaozhuang 2010-09-08
  • 打赏
  • 举报
回复
按位移动是个不错的办法
东大坡居士 2010-09-08
  • 打赏
  • 举报
回复
把你需要的位&1,其它位&0即可
duke56 2010-09-08
  • 打赏
  • 举报
回复
就是位的操作喽

&是有0则0
|是有1则1

想要去掉不要的东西,只要把你要的几位的值设置成1再进行与操作就可以把其它的都给去掉
sf_final 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 vipvvv 的回复:]
向右移相应的位之后在相与
先定义无符号变量
unsigned char i=010100110
信号:(i >> 2) & 0x7
电量:(i >> 5) & 0x7
[/Quote] 好像
vipvvv 2010-09-08
  • 打赏
  • 举报
回复
向右移相应的位之后在相与
先定义无符号变量
unsigned char i=010100110
信号:(i >> 2) & 0x7
电量:(i >> 5) & 0x7
luzhiwei512 2010-09-08
  • 打赏
  • 举报
回复
电量:i &0xe0>>5 还得向右移动5位
信号:i &0x1c>>2 向右移动2位
pengzhixi 2010-09-08
  • 打赏
  • 举报
回复
位移然后与1做与运算就是了
nadoo 2010-09-08
  • 打赏
  • 举报
回复
电量:i & 0xe0
信号:i & 0x1c
nadoo 2010-09-08
  • 打赏
  • 举报
回复
& 0xe0
hastings 2010-09-08
  • 打赏
  • 举报
回复
..
搜索一下位域看看..

70,014

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧