c语言16进制转换为10进制数的函数是什么?

Python012

c语言16进制转换为10进制数的函数是什么?,第1张

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

}