这个函数的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
}
16进制以0x开头,后面跟数字0~9或字母A~F(小写也可以),如:0x2D(16进制数2D)。1、十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。
2、十六进制与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
举例如下:intx=23
printf("%x",x)//以16进制格式输出,输出17。
printf("%o",x)//以8进制格式输出,输出27。
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) // 输出转换后的结果
}