今天的进制转换实现了10进制转换成2~9、16进制;2~9、16进制转换成10进制的功能,bi的同事给了在函数convert_n_to_10中,传字符串的建议,运行中总是出错,通过gdb调试出错误原因是字符没有减'0',快没有公交车了,贴一下程序,赶快回去了。。。时间过的真快啊
[root@bjxdurs235 c-study]# cat -n convert10_2_8_16.c
1 #include
2
3 int hex_word(int n){
4 switch (n){
5 case 10:
6 return 'A' ;
7 break;
8 case 11:
9 return 'B' ;
10 break;
11
12 case 12:
13 return 'C' ;
14 break;
15
16 case 13:
17 return 'D' ;
18 break;
19
20 case 14:
21 return 'E' ;
22 break;
23
24 case 15:
25 return 'F' ;
26 break;
27
28 default :
29 return n;
30
31
32 }
33 }
34
35 int hex_char_to_num(char n){
36 switch (n){
37 case 'A' :
38 return 10 ;
39 break ;
40
41 case 'B' :
42 return 11 ;
43 break ;
44
45
46 case 'C' :
47 return 12 ;
48 break ;
49
50 case 'D' :
51 return 13 ;
52 break ;
53
54 case 'E' :
55 return 14 ;
56 break ;
57
58 case 'F' :
59 return 15 ;
60 break ;
61
62 default :
63 return 10 ;
64 }
65 }
66
67 int mypow(int x , int y){
68 int i,result;
69 result=1;
70 for (i=0; i 71 result*=x;
72 }
73 //printf("%d\n",temp);
74 return result ;
75 }
76
77 /* convert a decimal number to a 2/8/16 format */
78 /* x is the system u convert to , y is the decimal number */
79
80 void convert_10_to_n(int x, int y){
81 int i=0;
82 int a[100];
83 while (y > 0){
84 a[i++] = y % x;
85 y = y / x;
86 }
87 for (i=i-1; i>=0; i--){
88 if (a[i] > 9){
89 printf("%c",hex_word(a[i]) );
90 }
91 else
92 printf("%d",a[i]);
93 }
94 printf("\n");
95 }
96
97 /* convert a 2/8/16 format number to the decimal one */
98
99 int convert_n_to_10(int x, char *y){
100 int sum = 0;
101 int i;
102 int len = strlen(y);
103 //printf("len:%d\n",len);
104 for (i=len; i>0; i--){
105
106 if (y[i-1] > '9'){
107 sum += hex_char_to_num(y[i-1]) * mypow(x,len-i) ;
108 }
109 else
110 sum += (y[i-1] - '0') * mypow(x,len-i);
111 }
112 printf("%d\n",sum);
113
114 }
115
116 int main(void)
117 {
118 convert_10_to_n(16,13);
119 convert_n_to_10(8,"7246");
120 }
阅读(525) | 评论(0) | 转发(0) |