|
发表于 2019-11-14 11:09:41
|
显示全部楼层
本帖最后由 jackz007 于 2019-11-14 14:33 编辑
那就干脆来个简单粗暴的:
- #include <stdio.h>
- char * d2str(char * s , unsigned long long a , int w)
- {
- unsigned char e[64] = {0} ;
- unsigned int k , m ;
- char b[65] ;
- for(k = 0 ; k < 10 ; k ++) e[k] = '0' + k ;
- for(k = 0 ; k < 26 ; k ++) e[10 + k] = 'a' + k ;
- for(k = 0 ; k < 26 ; k ++) e[36 + k] = 'A' + k ;
- for(k = 0 ; k < 2 ; k ++) e[62 + k] = '#' + k ;
- s[0] = '\0' ;
- if(w > 1 && w < 65) {
- for(m = 0 ; a ; a /= w) b[m ++] = e[a % w] ;
- for(k = 0 ; k < m ; k ++) s[k] = b[m - k - 1] ;
- s[m] = '\0' ;
- }
- return s ;
- }
- main(void)
- {
- unsigned long long A = 100 , B ;
- char s[4][65] ;
- printf("0b%s\t0o%s\t%s\t0x%s\n" , d2str(s[0] , A , 2) , d2str(s[1] , A , 8) , d2str(s[2] , A , 10) , d2str(s[3] , A , 16)) ;
- B = A >> 1 ;
- printf("0b%s\t0o%s\t%s\t0x%s\n" , d2str(s[0] , B , 2) , d2str(s[1] , B , 8) , d2str(s[2] , B , 10) , d2str(s[3] , B , 16)) ;
- return 0 ;
- }
复制代码
编译、运行实况:
- C:\Bin>g++ -o a a.c
- C:\Bin>a
- 0b1100100 0o144 100 0x64
- 0b110010 0o62 50 0x32
- C:\Bin>
复制代码
注:二进制添加了 "0b" 前缀,八进制添加了 "0o" 前缀,十六进制添加了 "0x" 前缀。
正如你所看到的那样,自编函数 d2str() 支持整型数到 2 ~ 64 进制数的自由转换。 |
|