标题:
C语言如何将一个十六进制数转换成二进制数并存放进一个数组中
[打印本页]
作者:
Awaken
时间:
2020-4-30 22:18
标题:
C语言如何将一个十六进制数转换成二进制数并存放进一个数组中
假设定义一个十六进制数0x7f,如何将它转换成二进制数01111111,并将每一位二进制数存放到数组a中,如下所示:a[8]={0,1,1,1,1,1,1,1}。
作者:
csmyldl
时间:
2020-5-1 08:57
a[0]=(bit)(temp&(1<<7));
a[1]=(bit)(temp&(1<<6));
a[2]=(bit)(temp&(1<<5));
a[3]=(bit)(temp&(1<<4));
a[4]=(bit)(temp&(1<<3));
a[5]=(bit)(temp&(1<<2));
a[6]=(bit)(temp&(1<<1));
a[7]=(bit)(temp&1);
作者:
wulin
时间:
2020-5-1 09:51
数是一个用于计数、标记或用作量度的抽象概念,数的不同进制是数的不同表达方式,这个数所代表的量度本质不变。楼主是想把一个字节数据以二进制按位分解存放到8个数组成员中,这时原来数据的本质已改变。分解方法:
unsigned char a[8];
void Part(unsigned char k)
{
unsigned char i;
for(i=8;i>0;i--)
{
a[i-1]=k&0x01;
k>>=1;
}
}
作者:
xxpp2011
时间:
2020-5-1 10:15
按位取出来就行了,
a[7]=0X7F%2;
a[6]=0X7F/4%2;
a[5]=0X7F/8%4;
a[4]=0X7F/16%8;
...
作者:
tzzzzi
时间:
2020-5-1 12:44
建议不要这样用,浪费内存。不如要用的时候在做处理 k >>= 1 在与 0x01 相与。
作者:
f556
时间:
2020-5-1 13:47
0x7f,不是将它转换成二进制数01111111,0x7f本身就是B01111111,是按二进制位拆成一个char。
楼上3种方法均可行。
这个问题为什么没有程序员提出?因为这种拆分没有多少实际意义,或者说一般不拆,大多是位合成数。比如通信。
a[8]占用了64个字节,不小!!有些MCU只有128字节RAM,1kf lash,如430F2001等。
真要取某位在程序中直接取就行,如0x7f&0x01,var&0x40,var&0x80等,这才是正道。特别要注意0x01,0x80这两个数非常有用,也常用。即取低位,取高位。
要改写某一位也简单。总之,合并才是正道。
有可能Microsoft会这样玩,32、64位,系统越来越大,不是位越长起快。变量满天飞,想用变量就定义,结果是越升级系统越慢。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1