求助大神 帮我解释一下 这是一个将16进制转成10进制的程序-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5580|回复: 3

求助大神 帮我解释一下 这是一个将16进制转成10进制的程序

[复制链接]
发表于 2017-6-7 21:41 | 显示全部楼层 |阅读模式
uint32_t h2d(char *strHex) {
  uint32_t dwValue = 0;
  char *pCh = strHex;
  while (*pCh != 0) {
    dwValue <<= 4;
    if (*pCh >= '0' &&  *pCh <= '9')
      dwValue += *pCh - '0';
    else if (*pCh >= 'A' &&  *pCh <= 'F')
      dwValue += *pCh - 'A' + 10;
    else if (*pCh >= 'a' &&  *pCh <= 'f')
      dwValue += *pCh - 'a' + 10;
    else
      return 0;
    pCh++;
  }
  return dwValue;
}

发表于 2017-6-7 23:11 | 显示全部楼层
if (*pCh >= '0' &&  *pCh <= '9')
      dwValue += *pCh - '0';  //将字符 0-9 转换为数值 0-9
    else if (*pCh >= 'A' &&  *pCh <= 'F')
      dwValue += *pCh - 'A' + 10; //将字符 A-F 转化为 10-15
    else if (*pCh >= 'a' &&  *pCh <= 'f')
      dwValue += *pCh - 'a' + 10; //将字符 a-f 转化为 10-15

最后,比如:  8A7C 就能转换为  8  10  7 12

然后就是  (((8<<4)+10)<<4+7)<<4+12  == 35452
 楼主| 发表于 2017-6-8 10:15 | 显示全部楼层
Zoologist 发表于 2017-6-7 23:11
if (*pCh >= '0' &&  *pCh = 'A' &&  *pCh = 'a' &&  *pCh

谢谢  我再自己琢磨琢磨   
uint32_t h2d(char *strHex)  /    dwValue <<= 4 /    dwValue += *pCh - 'A' + 10;
这三句不太明白
发表于 2017-7-27 17:08 | 显示全部楼层
这个dwValue <<= 4意思是每次把一个数进行移位然后合成对应大小的十进制数,有点类似权值相加
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:55 , Processed in 0.140976 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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