转自http://www.cnblogs.com/kongtiao/archive/2012/04/20/2459523.html
整理一下,免得自己忘记,也希望能帮到有需要的人。
————————————————————————我是一条华丽的分割线————————————————————————
全局变量:双精度浮点数p、字符数组out。
当其他进制转换成十进制时,将转换结果存储在浮点数p中;当十进制转换成其他进制时,将结果以字符串的形式存放在字符数组out中。
转换过程分为整数部分和小数部分,整数部分转换后需逆序输出,而小数部分顺序输出。
例如:
Conversion(num,8,10);
表示将num字符串数组所对应的一个八进制数转换成一个十进制数。
直接上代码
1 int Conversion(char num[20], int t, int n)
2 {
3 int i,ii,j,k,m,x,b[30],h[30],c;
4 double d,r;
5 ii=0;
6 p=0;
7 memset(out,0,20);
8 m=strlen(num);//求字符串的长度
9 x=m;
10 for(k=0,j=0;k=0;j--)
20 {
21 if(num[j]=='-') break; //符号的处理
22 if(num[j]=='A') r=10;
23 else if(num[j]=='B')
24 r=11;
25 else if(num[j]=='C')
26 r=12;
27 else if(num[j]=='D')
28 r=13;
29 else if(num[j]=='E')
30 r=14;
31 else if(num[j]=='F')
32 r=15;
33 else
34 r=num[j]-'0';//将字符转换成数字
35 p=p+r*(pow ((double)t,(double)(x-j-1)));//计算结果
36 }
37
38 if(num[x]=='.')
39 {
40 for(j=x+1;j=10)
87 break;//主要是控制小数后面万一出现无限小数的时候好跳出循环以免出现死循环
88 }
89 }
90 if(num[0]=='-')
91 {
92 out[0]='-';
93 ii++;
94 }
95 for(j=i-1;j>=0;j--,ii++)//反序输出,大于10的数字进行相应的变化
96 {
97 if(h[j]==10) out[ii]='A';
98 else if(h[j]==11) out[ii]='B';
99 else if(h[j]==12) out[ii]='C';
100 else if(h[j]==13) out[ii]='D';
101 else if(h[j]==14) out[ii]='E';
102 else if(h[j]==15) out[ii]='F';
103 else if(h[j]==9) out[ii]='9';
104 else if(h[j]==8) out[ii]='8';
105 else if(h[j]==7) out[ii]='7';
106 else if(h[j]==6) out[ii]='6';
107 else if(h[j]==5) out[ii]='5';
108 else if(h[j]==4) out[ii]='4';
109 else if(h[j]==3) out[ii]='3';
110 else if(h[j]==2) out[ii]='2';
111 else if(h[j]==1) out[ii]='1';
112 else out[ii]='0';
113 }
114 if(p!=(int)p)//选择性输出,这样可以节约输出时间和程序的运行时间
115 {
116 out[ii++]='.';
117 for(j=0;j |