此代码为什么要有个先+'0'再-'0'的操作,意欲何为?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{
    char a[10];
    int i;
    scanf("%s",&a);
    int len=strlen(a);
    long long int sum=0;
    for(i=0;i<len;i++)
    {
        if(a[i]>='A'&&a[i]<='F')
        {
            a[i]=(a[i]-'A')+10+'0';就是这一行
        }
        if(a[i]>='a'&&a[i]<='f')
        {
            a[i]=(a[i]-'a')+10+'0';这一行
        }
        sum+=(a[i]-'0')*pow(16,len-i-1);和这一行
    }
    printf("%lld",sum);
    return 0;
}

 

scanf是从键盘获取输入的字符,也就是ascii码,如果要计算的话,需要先将ascii码转换成数字,最简单的方法就是将字符的值减去一个字符0,

得出数字,比如ascii码0的实际值是48,ascii码1的实际值是49,则字符1减去字符0,得出就是数字1了

相加减会自动转换成ASCII码 , a[i] - '0', 意思就是 计算差值,假设a[i] = '5', 那么'5' - '0' = 5

 

最好能把这段代码要实现的功能写出来,一时半会看不出来也不好继续解答。