编写函数htoi(s)
,把十六进制数字组成的字符串(包含 可选 的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f、A~F。
#include <stdio.h>
#define YES 1
#define NO 0
int htoi(char s[]);
int main(void)
{
printf("%d\n", htoi("0x4"));
printf("%d\n", htoi("0x11"));
return 0;
}
int htoi(char s[])
{
int hexdight, i, inhex, n;
i = 0;
if (s[i] == '0')
{
i++;
if (s[i] == 'x' || s[i] == 'X')
{
i++;
}
}
n = 0;
inhex = YES;
for (; inhex == YES; i++)
{
if (s[i] >= '0' && s[i] <= '9')
hexdight = s[i] - '0';
else if (s[i] >= 'a' && s[i] <= 'f')
hexdight = s[i] - 'a' + 10;
else if (s[i] >= 'A' && s[i] <= 'F')
hexdight = s[i] - 'A' + 10;
else
inhex = NO;
if (inhex == YES)
n = 16 * n + hexdight;
}
return n;
}
一个数的十六进制0xabcd
,可以写做:
16
(
16
(
16
(
a
)
+
b
)
+
c
)
+
d
16(16(16(a) + b) + c)+ d
16(16(16(a)+b)+c)+d
函数中,每一位是hexdight(a、b、c、d),n是上一次的和(括号中的内容),所以有:
n = 16 * n + hexdight;