这程序其实是《c程序设计语言》P37,练习2.3
htoi()函数是从习题解答上抄的(包括头文件的两个define),main()是自己写来测试的。编写函数htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~~9、 a~~f 以及A~~F。
程序代码如下:
代码: 全选
#include <stdio.h>
#define YES 1
#define NO 0
int htoi(char s[])
{
int hexdigit, 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' )
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;
if ( inhex == YES )
n = 16*n + hexdigit;
}
return n;
}
main()
{
printf("%d\n",htoi("32"));
return 0;
}
代码: 全选
lyre@linux-4179e1:~/c> gcc t2.3.c -o t2.3.c.o
lyre@linux-4179e1:~/c> ./t2.3.c.o
段错误
lyre@linux-4179e1:~/c>
不排除htoi()函数抄错了,或者main()函数有问题= =