/*练习2-3 编写函数htoi(s),将十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。
字符串允许包含的数字包括:0~9、a~f、A~F。*/
#include <stdio.h>
int htoi(char s[]);
int main()
{
int a = htoi("1234");
int b = htoi("0x1f");
int c = htoi("0XAD");
printf("十进制:%d, 十六进制:%#x\n",a,a);
printf("十进制:%d, 十六进制:%#x\n",b,b);
printf("十进制:%d, 十六进制:%#x\n",c,c);
return 0;
}
int htoi(char s[])
{
int n,i ;
n = 0;
for (i=0;s[i]!='\0';i++)
{
if (s[i]=='0'&&(s[i+1]=='x'||s[i+1]=='X'))
{
i = i+2;
}
if((s[i]>='0'&&s[i]<='9'))
{
n = n*16+s[i]-'0';
}
else if (s[i]>='a'&&s[i]<='f')
{
n = n*16+10+s[i]-'a';
}
else if (s[i]>='A'&&s[i]<='F')
{
n = n*16+10+s[i]-'A';
}
}
return n;
}