找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1717|回复: 7
打印 上一主题 下一主题
收起左侧

C语言数组元素读取问题

[复制链接]
跳转到指定楼层
楼主
ID:365235 发表于 2020-4-27 22:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假设定义一个数组,里面是8个二进制数,如下所示:unsigned char a[8]={0,1,1,1,1,1,1,1};这个里面的二进制数组合起来就成十六进制数0x7f, 那么如何可以将数组元素转变成十六进制数0x7f呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:540236 发表于 2020-4-27 23:30 | 只看该作者
hex = a[0]*128+a[1]*64+a[2]*32+a[3]*16+a[4]*8+a[5]*4+a[6]*2+a[7]*1
回复

使用道具 举报

板凳
ID:624817 发表于 2020-4-28 01:31 | 只看该作者
首先数组unsigned char a[8]里面的元素不是二进制数,实际为a[8]={0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01}
那么数组a[8]里面每个元素的二进制值为
a[0] = 00000000B
a[1] = 00000001B
a[2] = 00000001B
a[3] = 00000001B....由此类推
如果非要将他们组合成0x7F
(不知道你这样做有什么用途,感觉没什么意义,但为了解答你下面演示一下)
可以参看下面代码,
u8 m;
for(i=0;i<8;i++)
{
    m|=a[i]<<(7-i);
  }
回复

使用道具 举报

地板
ID:592807 发表于 2020-4-28 08:36 | 只看该作者
Jiam 发表于 2020-4-28 01:31
首先数组unsigned char a[8]里面的元素不是二进制数,实际为a[8]={0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x0 ...

m = 0;加上,
回复

使用道具 举报

5#
ID:592807 发表于 2020-4-28 08:43 | 只看该作者
  1. u8 m;
  2. u8 i;
  3. m = 0;
  4. for(i = 0;i< 8;i++)
  5. {
  6. m <<= 1;
  7. if(a[i] ==0);
  8. else
  9. m+=1;
  10. }
复制代码


方法很多
回复

使用道具 举报

6#
ID:188773 发表于 2020-4-28 09:13 | 只看该作者
给几个位操作函数参考,先将数组中的值提取出来,然后赋值给对应的16进制数的对应位。
#define bitSet(Y,X) Y |= (1 << (X-1))                // Y的X位置1
#define bitClear(Y,X) Y &= ~(1 << (X-1))              // Y的X位置0
#define bitReverse(Y,X) Y ^= (1 << (X-1))      // Y的x位取反
#define bitRead(Y,X) ((Y >> (X-1))&1)                  // 读取 Y 的X位,返回值1、0
回复

使用道具 举报

7#
ID:624817 发表于 2020-4-28 11:43 | 只看该作者

我也是小白,可以解释一下为什么等于0呢
回复

使用道具 举报

8#
ID:267932 发表于 2020-4-28 18:12 | 只看该作者
Jiam 发表于 2020-4-28 11:43
我也是小白,可以解释一下为什么等于0呢

变量的初始化,形式也比较简单:

int a = 5;

这就是最简单的初始化语句了,如果是下面的语句:

int a;

那么知道变量a的默认初始值是多少吗?答案是不确定。当然不是说a的默认值是任意值,而是说变量a定义的位置、操作系统以及和使用的编译器相关。

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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