x=x*16+str-'0' とx=x*16+str-'a'+10
計算で10進数に変換するのですが、仕組がよくわかりません!
教えてください!
#include <stdio.h>
#include <ctype.h>
int main()
{
char str[128];
long x=0;
int i=0;
printf ("16進数を入力");
scanf ("%s",str);
//データ変換処理
while (str[i]!='\0') {
//16進数で表せる文字か
if (isxdigit(str[i])!=0) {
//数字で表せる文字か
if (isdigit(str[i])!=0) {
//10進数に変換
x=x*16+str[i]-'0';
}
else {
//大文字は小文字に変換
str[i]=tolower(str[i]);
//10進数に変換
x=x*16+str[i]-'a'+10;
}
}
else
{
printf ("10進数には変換できません\n");
return 0;
}
i++
}
printf ("10進数:%ld\n",x);
return 0;
}