fabvy12 发表于 2019-10-26 21:20:36

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

number=number*10+str-'0';   


为什么要减去 ‘0’,

求助

jackz007 发表于 2019-10-26 21:43:29

      这是把字符转换成数字的方法,'0' - '0' = 0,'9' - '0' = 9,这样操作前,必须要确定字符必须是数字 '0' ~ '9'。

fabvy12 发表于 2019-10-26 21:55:18

jackz007 发表于 2019-10-26 21:43
这是把字符转换成数字的方法,'0' - '0' = 0,'9' - '0' = 9,这样操作前,必须要确定字符必须是数字 ...

        number=0;
        for (i=0;hexad!='\0';i++){
                if (hexad>='0'&&hexad<='9')
               number=number*16+hexad-'0';
                       if (hexad>='A'&&hexad<='F')
               number=number*16+hexad-'A'+10;
                       if (hexad>='a'&&hexad<='f')
               number=number*16+hexad-'a'+10;
        }
        printf("Number=%ld\n",number);

fabvy12 发表于 2019-10-26 21:56:46

jackz007 发表于 2019-10-26 21:43
这是把字符转换成数字的方法,'0' - '0' = 0,'9' - '0' = 9,这样操作前,必须要确定字符必须是数字 ...

我有点不明白你的意思。我知道这是转换字符的方法。为什么一顿操作之后。还要减去一个'0';
我试着去掉。然后结果变的不一样。感觉好奇怪

fabvy12 发表于 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也不是很懂

fabvy12 发表于 2019-10-26 21:58:58

fabvy12 发表于 2019-10-26 21:57
然后这个转换 -‘A'+0   -’a'+10也不是很懂

有点明白你的意思了

fabvy12 发表于 2019-10-26 21:59:33

jackz007 发表于 2019-10-26 21:43
这是把字符转换成数字的方法,'0' - '0' = 0,'9' - '0' = 9,这样操作前,必须要确定字符必须是数字 ...

有点明白你的意思了

jackz007 发表于 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',否则,没有意义。

fabvy12 发表于 2019-10-26 22:20:09

谢谢!
页: [1]
查看完整版本: number=number*10+str[i]-'0';