码迷,mamicode.com
首页 > 其他好文 > 详细

c 十六进制 转 十进制

时间:2014-09-12 01:12:52      阅读:374      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   div   sp   代码   log   c   

考虑到举一反三,这里顺便上完整代码,顺便可以考虑实现R进制和十进制的转换.

完整代码:

 1 #include <stdio.h>
 2 #include <math.h>
 3 
 4 double
 5 hexToDecimal(int);
 6 
 7 double
 8 octToDecimal(int);
 9 
10 double
11 toDecimal(int, int, int);
12 
13 int
14 main(void) {
15     int a = 0x3c;
16     double r = hexToDecimal(a);
17     printf("%.f\n", r);
18     a = 017;
19     r = octToDecimal(a);
20     printf("%.f\n", r);    
21 }
22 
23 double
24 hexToDecimal(int hex) {
25     return toDecimal(hex, 15, 4);
26 }
27 double
28 octToDecimal(int oct){
29     return toDecimal(oct, 7, 3);
30 }
31 
32 
33 double
34 toDecimal(int num, int base, int offset) {
35     int i = 0;    //(b)的i次幂.
36     double r=0;    //十进制结果.
37     double b= base + 1;    //底数为b.
38     while(num) {
39         double t = (int)(num & base);
40         r += t * pow(b, i++);
41         num>>=offset;
42     }
43     
44     return r;
45 }

该算法还是蛮简单,易懂的.例如十六进制的 3C,依次从右往左取数,通过&(与)15(4位1)可以得到C的二进制值的大小,为12.接下来就不用说了.很简单了.

c 十六进制 转 十进制

标签:style   blog   color   io   div   sp   代码   log   c   

原文地址:http://www.cnblogs.com/listened/p/3967548.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!