本帖最后由 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)) ; // 把十六进制字符串转换回十进制数显示
}
|