求c语言16进制转2进制的代码 要有注释不然看不懂 谢谢

如题所述

#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); //打印出二进制数字符串 
}

温馨提示:答案为网友推荐,仅供参考