- /*
- 输入一个字符串,判断是否为一个十六进制数整数形式的字符串,
- 如果是,转变成一个"int"量存储
- */
- #include<stdio.h>
- #include<stdlib.h>
- #define SHI 1
- char * qiu_begin(char *);
- int buhefa(char);
- int qiu_zhi(char *);
- void tuichu(char *);
- void main()
- {
- char sljzs[80]; //十六进制数
- char *p_tou=NULL; //开头
- int zfh=1; //正负号
- int zhi; //存储最终值
- //输入
- puts("输入一个十六进制数形式的字符串");
- gets(sljzs);
- //求最前面非空白字符位置
- p_tou=qiu_begin(sljzs);
- if( *p_tou=='\\0')
- tuichu("空字符串无法转换");
- //跳过正负号
- switch(*p_tou)
- {
- case '+': p_tou++;break;
- case '-': p_tou++;zfh=-1;break;
- }
- //判断是否合法
- if(SHI==buhefa(*p_tou))
- tuichu("输入不合法无法转换");
- //转换
- zhi=zfh*qiu_zhi(p_tou);
- printf("%s的值为%d\\n",sljzs,zhi);
- system("pause");
- }
- char * qiu_begin(char *p)
- {
- while(*p==' '||*p=='\\n'||*p=='\\t')
- p++;
- return p;
- }
- int buhefa(char ch)
- {
- if('0'<=ch&&ch<='9')
- return !SHI;
- if('a'<=ch&&ch<='f')
- return !SHI;
- if('A'<=ch&&ch<='F')
- return !SHI;
- return SHI;
- }
- int qiu_zhi(char *p)
- {
- int zhi=0;
- char c;
- do{
- c=*p++;
- zhi*=16;
- zhi+= ('0'<=c&&c<='9') ? (c-'0'):\\
- ('A'<=c&&c<='F') ? (c-'A') + 10 :(c-'a') +10;
- }while(buhefa(*p)!=SHI);
- return zhi;
- }
- void tuichu(char *p)
- {
- puts(p);
- system("pause");
- exit(1);
- }
- //该片段来自于http://www.codesnippet.cn/detail/220920136027.html
来源: http://www.codesnippet.cn/detail/220920136027.html