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

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) // 输出转换后的结果

}

十六进制转换成十进制的具体算法是:

1、首先明白16进制数(从右到左数是第0位,第1位,第2位……)的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方,依次这样排列下去。

2、明白ABCDEF表示的二进制数字分别是10,11,12,13,14,15。

3、十六进制转换成十进制的公式是:要从右到左用二进制的每个数去乘以16的相应次方,然后这些数字相加就是了。

例1:

2AF5换算成10进制:

第0位:5*16^0=5

第1位:F*16^1=15*16^1=240

第2位:A*16^2=10*16^2=2560

第3位:2*16^3=8192结

果就是:5*16^0+15*16^1+10*16^2+2*16^3=10997

例2:CE换算成10进制:

第0位:E*16^0=14*16^0=14

第1位:C*16^1=12*16^1=192

结果就是:14*16^0+12*16^1=206

进制转换的理论

1、 二进制数、十六进制数转换为十进制数:

用按权展开法把一个任意R 进制数a n a n-1 ...a1a 0 . a -1 a -2...a -m转换成十进制数,其十进制数值为每一位数字与其位权之积的和。

a n ×Rn+ a n-1×R n-1 +…+ a 1×R 1 + a 0×R 0 + a -1 ×R -1+ a -2×R -2+ …+ a -m ×R -m

2、 十进制转化成R 进制十进制数轮换成R 进制数要分两个部分:整数部分要除R 取余数,直到商为0,得到的余数即为二进数各位的数码,余数从右到左排列(反序排 列) 。小数部分要乘R 取整数,得到的整数即为二进数各位的数码,整数从左到右排列(顺序排列) 。

3、十六进制转化成二进制:每一位十六进制数对应二进制的四位,逐位展开。

4、 二进制转化成十六进制:将二进制数从小数点开始分别向左(对二进制整数)或向右(对二进制小数)每四位组成一组,不足四位补零。

最简单的使用scanf()函数和printf()函数进行格式转换,以16进制格式输入,再以10进制格式输出。

程序代码如下:

#include<stdio.h>

int main()

{

int a=0

int i=0

scanf("%x",&a)

printf("%d",a)

return 0

}

运行结果:

扩展资料:

scanf函数与printf函数的用法很像,都是以格式化的形式进行 *** 作,例如上述程序中scanf("%x", &a)就是将输入数据以十六进制格式存储到变量a中。

"%x"是将字符串A23CD以十六进制形式输入a中,如果将"%x"换成为"%d"的话,就是将字符串A23CD以十进制形式输入a中,这显然是错误的,因为将A23CD转换为十进制的时候,无法解析A,CD等字符,所以得出的结果就是错误的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7947851.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存