十六进制字符串转换成十进制数

#include
#include
#include
int main()
{  下面有讲解!!!!!!!
    char arr[100]={0};
    scanf("%s",arr);
    int m=0;
    int sz=strlen(arr);
    int i=0;
    for(i=0;i<sz;i++)
    {
        if(arr[i]>='0'&&arr[i]<='9'){
            m=m*16+arr[i]-'0';
        }
        else
        {
            m=m*16+arr[i]-'A'+10;
        }
    }
    printf("%d",m);
    return 0;
}
 m=m*16+arr[i]-'0';'0'的目的就是将arr[i]中的字符转化成数字
 假设字符串是123转换成10进制
 循环第一圈:m=0*16+1;
 第二圈:m=1*16+2;
 第三圈:m=(1*16+2)*16+3,这不就相当于(1*16^2)+(2*16^1)+(3*16^0)
 结果为:291
 
 m=m*16+arr[i]-'A'+10;
 这里为什么要加10因为A在16进制中表示10
 比如:假设arr[i]='C';
 arr[i]-'A'+10 = 'C'-'A'+10 = 12 12不就对应16进制中的C

你可能感兴趣的:(算法,数据结构,排序算法)