就是说通过函数计算来将十六进制转换成十进制
#include<stdio.h>
#include<string.h>
#include<math.h>
long x_d(char str[],int n)
{
int i,t;
long sum=0;
for(i=0;i<n;i++)
{
if(str[i]>='a')
t=str[i]-'a'+10;
else
t=str[i]-'0';
sum=sum+t*(long)pow(16,n-1-i);
}
return(sum);
}
int main()
{
char str[20];
int len;
printf("Please input with a b c d e f:");
scanf("%s",str);
len=strlen(str);
printf("%ld\n",x_d(str,len));
return(0);
}
//一个很苯的办法...表笑我.
#include<stdio.h>
#include<ctype.h>
#define DEC 10
#define HEX 16
int main(void)
{
const char cstr[]="ABCDEF";
char str[20];
printf("Input a integer:");
while(gets(str)&&str[0]!='\0')
{
int num[20],flag=1,i=0,j;
long n=0;
if(str[0]=='-') {flag=-1;printf("-");i=1;}
for(;i<strlen(str);i++)
{
printf("%c",str[i]);
str[i]=toupper(str[i]); //判断;
if(str[i]<'0'||(str[i]>'9'&&str[i]<'A')||str[i]>'F')
{printf("... Take your time.\n");system("pause");exit (1);}
for(j=0;j<6;j++) //a~f的转换;
{
if(str[i]==cstr[j]) {num[i]=DEC+j;break;}
else num[i]=str[i]-'0';
}
}
for(j=(str[0]=='-'?1:0);j<=i;j++) //输出;
{
if(j<i) n=n*HEX+num[j];
else {printf(" (Hex) is: %ld (Dec).\n\n",flag*n);}
}
printf("Next:");
}
system("pause");
return 0;
}
感觉好乱,,,不过是我自己试了好多次的啊.尽管还没变成函数调用...
如果要简练的话,得用strtol吧.
#include<stdio.h>
#include<string.h>
#include<math.h>
long trans(char *p,int m)
{
long sum=0;
int i,a;
for(i=m-1;i>=0;i--)
{
if(*(p+i)>='A'&&*(p+i)<='F')
a=*(p+i)-'A'+10;
else if(*(p+i)>='a'&&*(p+i)<='f')
a=*(p+i)-'a'+10;
else
a=*(p+i)-48;
sum+=a*pow(16,m-1-i);
}
return sum;
}
void main()
{
int n;
long h;
char data[100];
gets(data);
n=strlen(data);
h=trans(data,n);
printf("%d",h);
getch();
}