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

 我来答
LifeReset
电脑发烧友

推荐于2017-12-16 · 识迷途其未远,觉今是而昨非
LifeReset
采纳数:902 获赞数:1485

向TA提问 私信TA
展开全部
这段代码你试试,由于取值范围的限制,只能实现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);}
风若远去何人留
推荐于2018-03-13 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20403 获赞数:450164
专业C/C++软件开发

向TA提问 私信TA
展开全部

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);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
学博士

2018-03-13 · 不定期分享教学视频内容
学博士
采纳数:194 获赞数:566

向TA提问 私信TA
展开全部
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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式