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

Python013

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

}

#include <stdio.h>

#include <math.h>

#include <string.h>

/* 任意进制数转十进制数 */

/* char *value : 其他进制数,以字符串形式存储 */

/* int *result : 转换后的十进制数 */

/* int radix : 待转换的进制 */

/* R进制数共n位,第n位表示为Xn。转换后的10进制数表示为Y */

/* Y = Xn*R^0 + Xn-1*R^1 + Xn-2*R^2 + …… + X1*R^n-1 */

void others2Decimal (char *value, int *result, int radix) { 

int digit,i,j

*result = 0

for (i=strlen(value)-1,j=0 i>=0 i--,j++) {

if (value[i]>='0' && value[i]<='9')

digit = value[i]-'0'

if (value[i]>='a' && value[i]<='z') /* 十以上进制处理,小写字母 */

digit = value[i]-'a'+10

if (value[i]>='A' && value[i]<='Z') /* 十以上进制处理,大写字母 */

digit = value[i]-'A'+10

*result += digit*pow(radix,j)

}

}

int main (void) {

char *value="ff"

int radix=16,result

    printf ("16进制数:%s\n10进制转换结果:",value) 

others2Decimal (value,&result,radix)

printf ("%d\n",result)

putchar ('\n')

getch () /*屏幕暂留*/

return 0

}

运行结果