#include "stdio.h"
int main()
{
char h[30],b[1024];
int d,i,k,n;
//以字符串形式输入十六进制数
printf("输入一个十六进制数:");
scanf("%s",h);
//逐个十六进制位转换
i=0;
n=0;
do
{
//将各位(字符型)十六进制数码转为整数
if(h[i]>='0' && h[i]<='9')
d=h[i]-'0';
else if(h[i]>='A' && h[i]<='F')
d=h[i]-'A'+10;
else
{
printf("输入格式有错误!只对有效位转化!");
return 0;
}
//十六进制转二进制,从最高位开始,按位权8,4,2,1,计算其对应的二进制数码存入变量数组b
k=8; //初始位权为8;
while(k>=1)
{
if(d>=k) //根据位权可知,该位的数码为1
{
b[n]='1'; //将该位写入二进制数字符串
d-=k; //减去已求出的数码为1的位权,即剩下部分
n+=1; //二进制数码的已求位数后移1位
}
else //根据位权可知,该位的数码为0
{
if(n!=0) //去除含0的起始位
{
b[n]='0';//将该位写入二进制数字符串
n+=1; //二进制数码的已求位数后移1位
}
}
k=k/2; //向右移1位后的位权;
}
b[n]=','; //每位十六进制数码对应的二进制数间用","隔开,如果不需分隔,请删除本行
n+=1; //如果不需分隔,请同时删除本行
i+=1; //下一十六进制数码位置
}while(h[i]!='\0'); //字符串结束标志,用于判断十六进制数是否读完
b[n]='\0'; //字符串结束标志
printf("%s",b); //打印出二进制数字符串
}
温馨提示:答案为网友推荐,仅供参考