/************************************************************************************ ***/ /* author:AnYuanLzh */ /* date: 2010-10-22 */ /* 编写一个函数(如:lzh_htoi(s),把由十六进制数字组成的字符 */ /* 串(前面可能包含0x或0X)转换成等价的整数值。字符串中允许的 */ /* 数字为:0~9,a~f,以及A~F。 */ /* VC++6.0下编译通过 */ /****************************************************************************************/ #define LEN 16 //LEN用来限定,字串的最大长度 #include <stdio.h> /****子函数声明*****/ int lzh_gets(char []); //获取一个字符串 double lzh_htoi(char []); //将一由十六进制数字组成的字符串转换成造价的整数值 int main() { char sNum[LEN]; //用来存放十六进制数字组成的字符串 double nNum; //用来保存转换好的整数 printf("请输一个16进制正整数,以回车键结束输入):"); lzh_gets(sNum); if ( (nNum=lzh_htoi(sNum)) == -1 ) { printf("要转换的不是不合法的16进制字符串/n"); } printf("它对应的10进制整数:%.0f/n",nNum); } int lzh_gets(char s[]) { int i, c; for (i=0; (c=getchar())!='/n' && i<LEN; i++) { s[i]=c; } s[i] = '/0'; // '/0'被设为字符串的结束标志 return 0; } double lzh_htoi(char s[]) { int i=0; double n=0; if (s[0]=='0' && (s[1]=='x'||s[1]=='X') ) //以0x和0X的处理 { i+=2; } while( s[i] != '/0' ) { if ( s[i]<='9' && s[i]>='0' ) { n = n*16 + (s[i]-'0'); } else if ( s[i]<='f' && s[i]>='a' ) { n = n*16 + (s[i]-'a')+10; } else if (s[i]<='F'&&s[i]>='A') { n = n*16 + (s[i]-'A')+10; } else { return -1; //反回-1表示,不是合法的16进制字符串 } i++; } return n; }