十六进制字符转换成十进制数表达式:
number=number*16+hexad[i]-'0'; //数字字符
number=number*16+hexad[i]-'A'+10; //大写英文字符
number=number*16+hexad[i]-'a'+10; //小写英文字符
//例7-14
//滤去所有非十六进制字符,组成表示十六进制字符串,并转换成十进制后输出
#include<stdio.h>
int main()
{
int i,k;
char hexad[80],str[80];
long number;
printf("Enter a string: ");
i=0;
while((str[i] = getchar())!='#')
i++;
str[i]='\0';
k=0;
for(i=0; str[i]!='\0'; i++)
if(str[i]>='0'&&str[i]<='9'||str[i]>='a'&&str[i]<='f'||str[i]>='A'&&str[i]<='F')
{
hexad[k]=str[i]; //放入新字符串
k++;
}
hexad[k]='\0'; //新字符串结束标志
printf("New string: ");
for(i=0; hexad[i]!='\0'; i++)
putchar(hexad[i]);
printf("\n");
number=0;
for(i=0; hexad[i]!='\0'; i++)
{
if(hexad[i]>='0' && hexad[i]<='9') //当hexad[i]是数字字符时
number=number*16+hexad[i]-'0';
else if(hexad[i]>='A'&&hexad[i]<='F') //当hexad[i]是大写英文字符时
number=number*16+hexad[i]-'A'+10;
else if(hexad[i]>='a'&&hexad[i]<='f') //当hexad[i]是小写英文字符时
number=number*16+hexad[i]-'a'+10;
}
printf("Number=%ld\n",number);
return 0;
}
Enter a string: zzy1+ak0bq? #
New string: 1a0b
Number=6667