本帖最后由 jackz007 于 2020-12-22 21:13 编辑 #include <stdio.h>
#include <string.h>
//字符串倒序
void reverse(char s[])
{
char c ;
int i , m ;
for(m = 0 ; s[m] ; m ++) ;
for(i = 0 ; i < m / 2 ; i ++) {
c = s[m - 1 - i] ;
s[m - 1 - i] = s[i] ;
s[i] = c ;
}
}
// 二进制字符串转换为整型数
int frombin(char s[])
{
int i , m , r ;
for(m = 0 ; s[m] ; m ++) ;
for(r = i = 0 ; i < m ; i ++) r = r * 2 + s[i] - '0' ;
return r ;
}
// 八进制字符串转换为整型数
int fromoct(char s[])
{
int i , m , r ;
for(m = 0 ; s[m] ; m ++) ;
for(r = i = 0 ; i < m ; i ++) r = r * 8 + s[i] - '0' ;
return r ;
}
// 十六进制字符串转换为整型数
int fromhex(char s[])
{
int i , m , r ;
char c ;
for(m = 0 ; s[m] ; m ++) ;
for(r = i = 0 ; i < m ; i ++) {
c = s[i] ;
if(c >= 'A' && c <= 'F') c += ' ' ;
if(c > '9') c = 10 + c - 'a' ;
else c = c - '0' ;
r = r * 16 + c ;
}
return r ;
}
//整型数转换为二进制字符串
char * tobin(char s[] , int d)
{
int i , m ;
for(i = 0 ; d ; d /= 2 , i ++) s[i] = (d % 2) + '0' ;
s[i] = '\0' ;
reverse(s) ;
return s ;
}
//整型数转换为八进制字符串
char * tooct(char s[] , int d)
{
int i , m ;
for(i = 0 ; d ; d /= 8 , i ++) s[i] = (d % 8) + '0' ;
s[i] = '\0' ;
reverse(s) ;
return s ;
}
//整型数转换为十六进制字符串
char * tohex(char s[] , int d)
{
char c ;
int i , m ;
for(i = 0 ; d ; d /= 16 , i ++) {
c = d % 16 ;
if(c > 9) s[i] = c - 10 + 'a' ;
else s[i] = c + '0' ;
}
s[i] = '\0' ;
reverse(s) ;
return s ;
}
// 二进制字符串到八进制字符串转换
// s[]- 二进制字符串输入 ,t[] - 八进制字符串输出
char * bin2oct(char s[] , char t[])
{
return tooct(t , frombin(s)) ;
}
// 八进制字符串到十六进制字符串转换
// s[]- 八进制字符串输入 ,t[] - 十六进制字符串输出
char * bin2hex(char s[] , char t[])
{
return tohex(t , frombin(s)) ;
}
// 八进制字符串到二进制字符串转换
// s[]- 八进制字符串输入 ,t[] - 二进制字符串输出
char * oct2bin(char s[] , char t[])
{
return tobin(t , fromoct(s)) ;
}
// 八进制字符串到十六进制字符串转换
// s[]- 八进制字符串输入 ,t[] - 十六进制字符串输出
char * oct2hex(char s[] , char t[])
{
return tohex(t , fromoct(s)) ;
}
// 十六进制字符串到二进制字符串转换
// s[]- 十六进制字符串输入 ,t[] - 二进制字符串输出
char * hex2bin(char s[] , char t[])
{
return tobin(t , fromhex(s)) ;
}
// 十六进制字符串到八进制字符串转换
// s[]- 十六进制字符串输入 ,t[] - 八进制字符串输出
char * hex2oct(char s[] , char t[])
{
return tooct(t , fromhex(s)) ;
}
int main(void)
{
char s[256] , t[256] ;
int d ;
strcpy(s , "10101010") ;
printf("bin : %s\n" , s) ;
printf("oct : %s\n" , bin2oct(s , t)) ;
printf("dec : %d\n" , fromoct(t)) ;
printf("hex : %s\n" , oct2hex(t , s)) ;
}
|