练习2-3 编写函数htoi(s),把由16进制数字组成的字符串(包含可选的前缀0X或0x)转换成与之等价的整形值。字符串中允许包含的数字包括:0~9,a~f,A~F。
参考代码:
#include<stdio.h>
#define YES 1
#define NO 0
//htoi: covert hexadecimal string s to interger
int htoi(char s[])
{
int hexdigit, i, inhex, n;
i = 0;
if(s[i] == '0') //skip optional 0x or 0X
{
++i;
if(s[i] == 'x' || s[i] == 'X')
{
++i;
}
}
n = 0; //interger value to be returned
inhex = YES; //assume valid hexadecimal digit
for( ; inhex == YES; ++i)
{
if(s[i] >= '0' && s[i] <= '9')
hexdigit = s[i] - '0';
else if(s[i] >= 'a' && s[i] <= 'f')
hexdigit = s[i] - 'a' + 10;
else if(s[i] >= 'A' && s[i] <= 'F')
hexdigit = s[i] - 'A' + 10;
else
inhex = NO; //not a valid hexadecimal digit
if(inhex == YES)
n = 16 * n + hexdigit;
}
return n;
}
int main()
{
char s[] = "0xfff23";
int n;
n = htoi(s);
printf("%d", n);
return 0;
}