各位看官們,大家好,從今天開始,我們講大型章回體科技小說 :C栗子,也就是C語言實例。閑話休提, 言歸正轉(zhuǎn)。讓我們一起talk C栗子吧!
看官們,上一回中咱們說的是生成隨機(jī)數(shù)的例子,這一回咱們說的例子是:進(jìn)制轉(zhuǎn)換。說到進(jìn)制估計大家 都不陌生,計算機(jī)中的進(jìn)制有二進(jìn)制,八進(jìn)制,十進(jìn)制,十六進(jìn)制。
今天咱們將要說的是十進(jìn)制如何轉(zhuǎn)換成二進(jìn)制,八進(jìn)制和十六進(jìn)制。在這里我把寫程序的步驟和算法思路 寫出來供大家參考。
看官們,咱們接下來說說如何進(jìn)行進(jìn)制轉(zhuǎn)換,也就是進(jìn)制轉(zhuǎn)換函數(shù)的內(nèi)容。
看官們,說完了轉(zhuǎn)換函數(shù),咱們接下來說說輸出進(jìn)制轉(zhuǎn)換結(jié)果的函數(shù)。
看官們,詳細(xì)的代碼如下,請大家參考:
1 /* **************************
2 * For Hex conversion
3 * *************************/
4 #include<stdio.h>
5
6 /*convert function
7 *Parameter a is used for saving converting result
8 *Parameter iVal is a value ,which will be converted.
9 *Parameter base is a base value ,
10 */
11
12 #define SUCCESS 0
13 #define FALSE 1
14 #define BIT 32
15
16 int convert(int *a,int iVal,int base)
17 {
18 int index = 0;
19 int res = 0;
20
21
22 if(NULL == a)// check the pointer
23 {
24 printf("null pointer \n");
25 return FALSE;
26 }
27
28 if( 0 == base) //check the base, 0 can't be used for division
29 {
30 printf("bad value of base \n");
31 return FALSE;
32 }
33
34 res = iVal;
35 //the main algorithm
36 do
37 {
38 *(a+index) = res % base;
39 res /= base;
40 ++index;
41 }while(res != 0);
42
43 return SUCCESS;
44 }
45
46 int showConvertResult(int *a)
47 {
48 int index = 0;
49
50 if(NULL == a)// check the pointer
51 {
52 printf("null pointer \n");
53 return FALSE;
54 }
55
56 for(index=BIT; index>0; --index)
57 {
58 if(index %4 == 0)
59 printf(" ");
60
61 switch( *(a+index-1) ) // input hex character
62 {
63 case 10:
64 printf("%c",'A');
65 break;
66 case 11:
67 printf("%c",'B');
68 break;
69 case 12:
70 printf("%c",'C');
71 break;
72 case 13:
73 printf("%c",'D');
74 break;
75 case 14:
76 printf("%c",'E');
77 break;
78 case 15:
79 printf("%c",'F');
80 break;
81 default:
82 printf("%d",a[index-1]);
83 break;
84 }
85 }
86
87 printf("\n");
88
89 return SUCCESS;
90 }
91
92 int main()
93 {
94 int base = 0;
95 int iVal =0;
96 int result = 0;
97 int hex[BIT] = {0}; // the max bit is 32
98
99 printf("please input a number for conversion: \n");
100 if(0 == scanf("%d",&iVal))
101 {
102 printf("Input number is not right \n");
103 return FALSE;
104 }
105
106 printf("please select a char for conversion: \n");
107 printf(" \t ->Decimal conver to Binary:input 1 : \n");
108 printf(" \t ->Decimal conver to Octonary:input 2 : \n");
109 printf(" \t ->Decimal conver to Hex:input 3 : \n");
110
111 if(0 == scanf("%d",&base))
112 {
113 printf("Input number for selecting is not right \n");
114 return FALSE;
115 }
116
117 switch(base)
118 {
119 case 1:
120 result = convert(hex,iVal,2);
121 break;
122
123 case 2:
124 result = convert(hex,iVal,8);
125 break;
126
127 case 3:
128 result = convert(hex,iVal,16);
129 break;
130
131 default:
132 break;
133
134 }
135
136 if(result == FALSE)
137 return FALSE;
138 else
139 {
140 showConvertResult(hex);
141 return SUCCESS;
142 }
143 }
各位看官,關(guān)于進(jìn)制轉(zhuǎn)換的例子咱們就說到這里。欲知后面還有什么例子,且聽下回分解。