进制转换
这个问题比较基础,也比较简单,直接给出代码
#include<stdio.h>
#include<string.h>
#include<math.h>
/*第一种方法:二进制数转整型*/
int b2i(char *bStr){
int count=0;
while(*bStr!=0){
count=*bStr-'0'+count*2;
bStr++;
}
return count;
}
/*第二种方法:二进制数转整型*/
int b2ix(char *bStr){
int count=0,len=strlen(bStr),i,j;
for(i=len-1,j=0;i>=0;i--,j++){
count+=(bStr[i]-'0')*(int)pow(2,j);
}
return count;
}
/*字符串逆置*/
void rotateStr(char *res,int len){
int mid=len/2,i;
char tmp;
for(i=0;i<mid;i++){
tmp=res[i];
res[i]=res[len-1-i];
res[len-1-i]=tmp;
}
}
/*移位法:整型n转2进制*/
void i2b(int n,char res[]){
int i=0;
do{
if( (n&1)==0){
res[i++]=0+'0';
}else{
res[i++]=1+'0';
}
n=n>>1;
}while(n>0);
res[i]=0;
rotateStr(res,i);
}
/*辗转相除法:整型n转radix进制*/
void i2r(int n,int radix,char res[]){
int i=0;
do{
res[i++]=n%radix+'0';
n/=radix;
}while(n>0);
res[i]=0;
rotateStr(res,i);
}
/*radix进制数转整型*/
int r2i(int radix,char *str){
int count=0;
while(*str!=0){
count=*str-'0'+count*radix;
str++;
}
return count;
}
void main(){
char bStr[1024]="11010";
int n;
printf("str=%s\n",bStr);
printf("b2i=%d\n",(n=b2i(bStr)));
printf("b2i=%d\n",b2ix(bStr));
char res[1024];
i2r(n,8,res);
printf("i2r=%s\n",res);
i2b(n,res);
printf("i2b=%s\n",res);
printf("b2r=%d\n",r2i(4,bStr));
}