开始的时候没有把处理的流程搞清晰,以为这会很容易,结果程序出现了一些混乱和错误。后来先把处理的流程搞清楚,就变得很明白了。
/*
练习2-3 编写函数htoi(s),把由十六进制数字组成的字符串(前面可能包含0x或0X)转换
成等价的整数值。字符串中允许的数字为:0~9,a~f,以及A~F。
*/
#include <stdio.h>
#define MAX 20
int htoi(char s[])
{
int i, n, num, weight;
n = 0;
weight = 1; /* 每一位的权值 */
for (i = 0; s[i+1] != '\0'; ++i); /* 定位到16进制串的最低位 */
for ( ; s[i] != 'x' && s[i] != 'X' && i >= 0; --i)
{
if (s[i] >= '0' && s[i] <= '9')
num = s[i] - '0';
else if (s[i] >= 'a' && s[i] <= 'f')
num = 10 + s[i] - 'a';
else if (s[i] >= 'A' && s[i] <= 'F')
num = 10 + s[i] - 'A';
n = n + weight * num;
weight *= 16;
}
return n;
}
main ( )
{
char s[MAX];
scanf("%s", s);
printf("%d", htoi(s));
}