二进制转为十六进制
string s;
// 16进制用来处理l到r之间的部分,先转为十进制,再输出
void fun(int l,int r)
{
int temp=0,i;
// 先转为十进制
for(i=l;i<r;i++){
temp = temp*2+(s[i]-'0');
}
// 再输出
if(temp>9){
printf("%c",temp-10+'A');
}else{
printf("%d",temp);
}
}
// 二进制转为十六进制
void convertTo16(){
int n = s.length();
// 先处理前面多余4的倍数的部分
int r = n%4;
if(r!=0)
fun(0,r);
int i=r;
// 循环处理后面的部分
for(;i<n;i=i+4){
fun(i,i+4);
}
}
二进制转为八进制
和上面思路一样的
string s;
void fun8_2(int l,int r)
{
int temp=0;
for(int i=l;i<r;i++){
temp = temp*2+s[i]-'0';
}
printf("%d",temp);
}
void convertTo8(){
int n=s.length();
int r=n%3;
if(r!=0)
fun8_2(0,r);
int i=r;
for(;i<n;i=i+3){
fun(i,i+3);
}
}