鱼C论坛

 找回密码
 立即注册
查看: 1535|回复: 8

[已解决]number=number*10+str[i]-'0';

[复制链接]
发表于 2019-10-26 21:20:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
number=number*10+str[i]-'0';   


为什么要减去 ‘0’  ,

求助
最佳答案
2019-10-26 22:14:54
本帖最后由 jackz007 于 2019-10-26 22:16 编辑

      十六进制数 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中,A 是 10,F 是 15。所以,如果字符是大写字母,那么,- 'A' + 10 就会得到这个字符对应的十进制数值。例如,对于字符 'F','F' - 'A' + 10 = 15,正好就是我们希望的数值。当然,这么计算的前提显然是,要计算的字符必须为 'A' ~ 'F',否则,没有意义。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-26 21:43:29 | 显示全部楼层
      这是把字符转换成数字的方法,'0' - '0' = 0,'9' - '0' = 9,这样操作前,必须要确定字符必须是数字 '0' ~ '9'。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-26 21:55:18 | 显示全部楼层
jackz007 发表于 2019-10-26 21:43
这是把字符转换成数字的方法,'0' - '0' = 0,'9' - '0' = 9,这样操作前,必须要确定字符必须是数字 ...

        number=0;
        for (i=0;hexad[i]!='\0';i++){
                if (hexad[i]>='0'&&hexad[i]<='9')
                 number=number*16+hexad[i]-'0';
                         if (hexad[i]>='A'&&hexad[i]<='F')
                 number=number*16+hexad[i]-'A'+10;
                         if (hexad[i]>='a'&&hexad[i]<='f')
                 number=number*16+hexad[i]-'a'+10;
        }
        printf("Number=%ld\n",number);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-26 21:56:46 | 显示全部楼层
jackz007 发表于 2019-10-26 21:43
这是把字符转换成数字的方法,'0' - '0' = 0,'9' - '0' = 9,这样操作前,必须要确定字符必须是数字 ...

我有点不明白你的意思。我知道这是转换字符的方法。为什么一顿操作之后。还要减去一个'0';
我试着去掉。然后结果变的不一样。感觉好奇怪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-26 21:57:50 | 显示全部楼层
fabvy12 发表于 2019-10-26 21:55
number=0;
        for (i=0;hexad!='\0';i++){
                if (hexad>='0'&&hexad='A'&&hexad='a'&&hexad

然后这个转换 -‘A'+0   -’a'+10也不是很懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-26 21:58:58 | 显示全部楼层
fabvy12 发表于 2019-10-26 21:57
然后这个转换 -‘A'+0   -’a'+10也不是很懂

有点明白你的意思了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-26 21:59:33 | 显示全部楼层
jackz007 发表于 2019-10-26 21:43
这是把字符转换成数字的方法,'0' - '0' = 0,'9' - '0' = 9,这样操作前,必须要确定字符必须是数字 ...

有点明白你的意思了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-26 22:14:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-10-26 22:16 编辑

      十六进制数 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中,A 是 10,F 是 15。所以,如果字符是大写字母,那么,- 'A' + 10 就会得到这个字符对应的十进制数值。例如,对于字符 'F','F' - 'A' + 10 = 15,正好就是我们希望的数值。当然,这么计算的前提显然是,要计算的字符必须为 'A' ~ 'F',否则,没有意义。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-26 22:20:09 | 显示全部楼层
谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 17:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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