|
发表于 2024-4-17 15:34:49
|
显示全部楼层
本帖最后由 jackz007 于 2024-4-17 15:40 编辑
- #include <stdio.h>
- #include <string.h>
- const char c[][18] = {"0123456789abcdef" , \
- "0123456789ABCDEF"} ;
- /* 十进制整型数 d 转换为 x 进制字符串 s,x : 2 ~ 16 */
- char * dec2x(char s[] , int d , int x)
- {
- int i , k , n ;
- strcpy(s , "-1") ;
- if(x >= 2 && x <= 16) {
- for(n = 0 , k = d ; k ; k /= x , n ++) ;
- for(i = 0 , k = d , s[n] = '\0' ; k ; k /= x , i ++) s[n - i - 1] = c[0][k % x] ;
- }
- return s ;
- }
- /* x 进制字符串 s 转换为十进制整型数,x : 2 ~ 16 */
- int x2dec(char s[] , int x)
- {
- int d , k , n ;
- d = -1 ;
- if(x >= 2 && x <= 16) {
- for(d = n = 0 ; s[n] ; n ++) {
- for(k = 0 ; c[0][k] != s[n] && c[1][k] != s[n] ; k ++) ;
- if(c[0][k] == s[n] || c[1][k] == s[n]) {
- d = d * x + k ;
- } else {
- d = -1 ;
- break ;
- }
- }
- }
- return d ;
- }
- int main(void)
- {
- char s[16][256] ;
- int d = 8193 ;
- printf(" 十进制:%d\n" , d) ;
- printf(" 二进制:%s\n" , dec2x(s[0] , d , 2)) ; // 以二进制显示十进制数 8193
- printf(" 八进制:%s\n" , dec2x(s[1] , d , 8)) ; // 以八进制显示十进制数 8193
- printf("十六进制:%s\n" , dec2x(s[2] , d , 16)) ; // 以十六进制显示十进制数 8193
- printf(" 十进制:%d\n" , x2dec(s[0] , 2)) ; // 把二进制字符串转换回十进制数显示
- printf(" 十进制:%d\n" , x2dec(s[1] , 8)) ; // 把八进制字符串转换回十进制数显示
- printf(" 十进制:%d\n" , x2dec(s[2] , 16)) ; // 把十六进制字符串转换回十进制数显示
- }
复制代码 |
|