找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5729|回复: 5
收起左侧

C语言如何将一个十六进制数转换成二进制数并存放进一个数组中

[复制链接]
ID:365235 发表于 2020-4-30 22:18 | 显示全部楼层 |阅读模式
假设定义一个十六进制数0x7f,如何将它转换成二进制数01111111,并将每一位二进制数存放到数组a中,如下所示:a[8]={0,1,1,1,1,1,1,1}。
回复

使用道具 举报

ID:235200 发表于 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);
回复

使用道具 举报

ID:213173 发表于 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;
        }
}

评分

参与人数 1黑币 +5 收起 理由
xxpp2011 + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:452950 发表于 2020-5-1 10:15 | 显示全部楼层
按位取出来就行了,
a[7]=0X7F%2;
a[6]=0X7F/4%2;
a[5]=0X7F/8%4;
a[4]=0X7F/16%8;
...
回复

使用道具 举报

ID:727389 发表于 2020-5-1 12:44 | 显示全部楼层
建议不要这样用,浪费内存。不如要用的时候在做处理 k >>= 1 在与 0x01 相与。
回复

使用道具 举报

ID:282850 发表于 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位,系统越来越大,不是位越长起快。变量满天飞,想用变量就定义,结果是越升级系统越慢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表