n进制转十进制:a*n^y + b*n^(y-1) + ... + x*n^0
十进制转n进制:除以n,取商和余......
1 #include <stdio.h>
2
3 void tobase(int, int);
4 int main()
5 {
6 tobase(33, 16);
7 return 0;
8 }
9
10 void tobase(int value, int base)
11 {
12 static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
13 char buf[(sizeof(long) << 3) + 1];
14 char *ptr, *end;
15
16 if (base < 2 || base > 36) {
17 printf("error base range \n");
18 }
19
20 end = ptr = buf + sizeof(buf) - 1;
21 *ptr = '\0';
22 do {
23 *--ptr = digits[value % base];
24 value /= base;
25 } while (ptr > buf && value);
26
27 printf("base: %d, => %s \n", base, ptr);
28 }
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <ctype.h>
4 #include <string.h>
5 #define MAX_CONVERT_NUM_LEN 50
6 char m2n(char m, char n, char *mNum, char *nNum)
7 {
8 char *np=nNum;
9 char JINZHI[37] ="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
10 unsigned int dec;
11 char shang[MAX_CONVERT_NUM_LEN], tt[MAX_CONVERT_NUM_LEN];
12 char *sp, *tp;
13 char getm, temp;
14
15 if(m<2 || m>36 || n<2 || n>36)
16 return -1;
17
18 strcpy(shang, mNum);
19 sp = shang;
20 while(*sp != '\0'){
21 dec = 0;
22 *tt = '\0';
23 tp = tt;
24 while(*sp != '\0'){
25 getm = *sp > '9' ? (toupper(*sp++)-'A'+10) : ((*sp++)-'0');
26 if(getm < 0 || getm >= m )
27 return -1;
28 dec = dec * m + getm;
29 if((temp=dec/n) != 0 || *tp != '\0')
30 *tp++ = JINZHI[temp];
31 dec %= n;
32 }
33 *np++ = JINZHI[dec];
34 *tp = '\0';
35 strcpy(shang, tt);
36 sp = shang;
37 }
38 *np-- = '\0';
39 while(np>nNum){
40 temp =*np;
41 *np-- =*nNum;
42 *nNum++ = temp;
43 }
44 return 0;
45 }
46
47 int main(int argc, char **argv)
48 {
49 char *m="123004560007890000abcdEF";
50 char n[MAX_CONVERT_NUM_LEN];
51
52 if(strlen(m) > 0 && 0 == m2n(16, 10, m, n))
53 printf("%s \n",n);
54 else
55 printf("error!!!\n");
56
57 system("pause");
58 return 0;
59 }