|
发表于 2020-12-22 21:02:35
|
显示全部楼层
本帖最后由 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)) ;
- }
复制代码 |
|