C语言十六进制转十进制

问题:从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

想问一下我的这个回答哪里错啦

#include
#include
int main()
{
    char a[8] = { 0 } ;
    int i=0, len=0;
    long long sum = 0;
    gets(a);
    len = strlen(a);
    for (i = len; 0 < i; i--)
    {
        if (a[i] >= '0' && a[i] <='9')
        {
            sum = 16 * sum + a[i];
        }
        if (a[i] >= 'A' && a[i] <= 'F')
        {
            sum = 16 * sum + a[i] - 'A' + 10;
        }
    }
    printf("%lld", sum);
}


img

大致的代码如下

int main()
{

    //进制转换4:从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
    int i=0,n=0;
    char a[10];
    unsigned long sum=0;

    scanf("%s",a);
    n=strlen(a);
    for (i=0;i<n;i++)
    {
        //注:ascii码:A~65 0~48
        //b=a[i];
        if (a[i]>='0'&&a[i]<='9')// 输入的数范围在0~9
        {
            sum=sum*16;
            sum=sum+a[i]-'0';
        }
        if (a[i]>='A'&&a[i]<='F')// 输入的数范围在10~15
        {
            sum=sum*16;
            sum=sum+a[i]-'A'+10;
        }
    }
    printf("%u",sum)
    //-----------------------------------------------------------*/

    return 0;
}

第一个if里面需要改成
sum=sum*16+a[i]-'0'