请教小问题(转换)
int htoi(char s[])
{int i, n=0;
for (i=0;s[i]!='\0';i++)
{
if (s[i]>='0' && s[i]<='9')
n=n*16+s[i]-'0';
if (s[i]>='a' && s[i]<='+')
n=n*16+s[i]-'a'+10;
}
return(n);
}
请教,本人知道(=n*16+s[i]-'0'或n=n*16+s[i]-'a'+10;不明白)是实现本题x转换十进制,但是我不懂这种运算,
为什么减字符0,为什么减a+10;
请教各位 ,可不可以写详细点!
在这就多谢谢
祝你新年愉快
问题点数:0、回复次数:3Top
1 楼yinjintao(thinking in money)回复于 2005-01-01 14:55:11 得分 0
16进制转换到10进制
16进制表示用 '0'-'9'和'a'-'f'表示每一位的数字
比如0xaf,用10进制表示就是10 *16+15
在一般的字符编码中,数字字符是连续的,所以减去'0'就可以得到相应的数值
而一般'a'不在'9'的后面,'a'代表数字10,所以要减去'a'以后再加上10得到对应的数值
这些你看一下ASCII编码就明白为什么了Top
2 楼xiaoxiaols()回复于 2005-01-03 12:14:23 得分 0
这与ASCALL 码的问题,看一下就明白了Top
3 楼chenee543216(奋斗成就男人!)回复于 2005-01-03 12:40:47 得分 0
梨叔很负责的说:了解ASCAII 码很重要!Top




