1、可以根据16进制转10进制的算法(即各位位码值乘以位权之和)来实现该功能。
2、具体实现方法可以参考如下程序:
#include <stdio.h>void main()
{
int he
int re=0 // 保存转换为10进制的结果
int k=16 // 16进制
int n=1 // 位权
scanf("%d", &he) // 接收用户输入的16进制数,不含0x前缀
while(he != 0)
{
re += (he%10)*n // 取出各位位码值,并乘以对应的位权值
he /= 10 // 去掉16进制数的最低位,次低位变为最低位
n *= k // 位权乘以16
}
printf("%d",re) // 输出转换后的结果
}
这个函数的int HtoD(char *a)就是将16进制的数用字符数组保存,把数组首地址作为参数传递给函数,函数返回转换后的10进制整型数值。
详细说明,我写在备注里了,你看以参考。
#include <stdio.h>#include <string.h>
int HtoD(char *a)//将16进制的数字用字符串保存,并将字符串首地址作为参数传递
{
int num=0,i
for(i=0 i<strlen(a) i++)//迭代 迭代次数为a数组的长度 形参a是指针,初值是指向字符数组的首地址,也就是指向16进制数字的左边第1位
{
//每次迭代 取指针指向的地址值进行判断,同时指针不断往右移动
if(*(a+i)>='0'&&*(a+i)<='9')//如果当前位是0~9的数字,那么总数值num累加同时前值*16(因为左边是高位,从高位往低位数,每多1位高位就*16)
num = num*16 + *(a+i)-'0'
else if(*(a+i)>='A'&&*(a+i)<='Z')//如果当前位是大写字母A~Z,转换成10进制数值,再累加
num = num*16 + *(a+i)-'A'+10
else if(*(a+i)>='a'&&*(a+i)<='z')//如果当前位是小写字母a~z,转换成10进制数值,再累加
num = num*16 + *(a+i)-'a'+10
else
return -1//表示输入错误的数
}
return num
}
int main()
{
char a[]="1F"
printf("1F=%d",HtoD(a)) //这里我写了简单的调用,打印结果:1F=31
return 0
}
这里程序设计从控制台输入十六进制数为字符串形式,转换为十进制的long型。比较简单,没有考虑正负号,小数等。
#include<stdio.h>
long fun(char *s)
int main()
{
long m
char s[50]
scanf("%s",s)
m=fun(s)
printf("%ld\n",m)
return 0
}
long fun(char *s)
{
int i,t
long sum=0
for(i=0s[i]i++)
{
if(s[i]<="9")
t=s[i]-"0"
else
t=s[i]-"a"+10
sum=sum*16+t
}
return sum
}