C语言将二进制数N转换成16进制的程序

发布网友 发布时间:2022-04-21 18:54

我来回答

3个回答

热心网友 时间:2022-05-23 18:00

这段代码你试试,由于取值范围的*,只能实现8位二进制的转换
你可以试试扩大取值范围,加以相应变化
个人能力有限,抛砖引玉,希望能给你点启发。。。
#include<math.h>
#include <stdio.h>
void main()
{int a,b=1,c,d,e;
int i,j=0,num[8],s[8];
char zh[8];
int shuju(int x);
scanf("%d",&a);

/*实现二进制的分解输入,把二进制的每一位数值导入到数组当中*/
if(-1<a&&a<11111112)
{for(i=0;i<8;i++)
{b=10*b;
c=b/10;
d=a/c;
num[i]=d%10;
if(num[i]>1)
{printf("输入错误,不符合二进制\n");
e=1;
break;}}}
else{printf("输入错误,超出范围\n");
e=1;}

/*对数组中的值进行重组,每4位编成一个四位数与子函数实现对比调用*/
if(e!=1)
{for(i=0;i<8;i=i+4,j++)
{s[j]=num[i]+num[i+1]*10+num[i+2]*100+num[i+3]*1000;
zh[j]=shuju(s[j]);
}
for(;j-1>=0;j--)
{if(zh[j-1]<10) printf("%d",zh[j-1]);
else printf("%c",zh[j-1]);}
printf("\n");
};
}

/*对比调用*/
int shuju(int x)
{char y;
switch(x)
{case 0: y=0;break;
case 1: y=1;break;
case 10: y=2;break;
case 11: y=3;break;
case 100: y=4;break;
case 101: y=5;break;
case 110: y=6;break;
case 111: y=7;break;
case 1000: y=8;break;
case 1001: y=9;break;
case 1010: y='A';break;
case 1011: y='B';break;
case 1100: y='C';break;
case 1101: y='D';break;
case 1110: y='E';break;
case 1111: y='F';break;
}
return(y);}

热心网友 时间:2022-05-23 18:01

1 输入的二进制数存成字符串;

2 遍历每位字符,并将其转为整数;

3 以16进制输出。

代码:

int main()
{
    char bin[33];
    int n = 0,i;
    scanf("%s",bin);
    for(i = 0; bin[i]; i ++)
    {
        n*=10;
        n+=bin[i]-'0';
    }
    printf("%x",n);
}

热心网友 时间:2022-05-23 18:01

1 输入的二进制数存成字符串;
2 遍历每位字符,并将其转为整数;
3 以16进制输出。
代码:
int main()
{
char bin[33];
int n = 0,i;
scanf("%s",bin);
for(i = 0; bin[i]; i ++)
{
n*=10;
n+=bin[i]-'0';
}
printf("%x",n);
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com