问题及代码:
/*十六进制(hexadecimal)数字组成的字符串(string)
转换(convert)为等价的整型值(integer)*/
#define YES 1
#define NO 0
/*字符串转换成整数的函数*/
int htoi(char s[])
{
int hexdigit,i,inhex,n;
i=0;
if(s[i]=='0') //跳过可选的0x、0X(skip optional 0x or 0X)
{
i++;
if(s[i]=='x'||s[i]=='X')
i++;
}
n=0;
inhex=YES; // 假定有效16进制数字 (assume vaild hexadecimal digit)
for(;inhex==YES;i++) //i的取值为合法的十六进制数时,inhex取值保持YES
{
if(s[i]>='0'&&s[i]<='9')
hexdigit=s[i]-'0'; //取值0-9
else if(s[i]>='a'&&s[i]<='f')
hexdigit=s[i]-'a'+10; //s[i]-a取值0-5
else if(s[i]>='A'&&s[i]<='A')
hexdigit=s[i]-'a'+10;
else
inhex=NO;
if(inhex==YES)
n=16*n+hexdigit; //不是很理解这个算法
}
return n;
}