16进制转换成2进制
十六进制和二进制互转很简单
只要将对应的每一个十六进制数转换成二进制,拼接起来就行了
比如:
$ABCD, A==>1010,B==>1011 C==>1100,D==>1101
拼接:1010 1011 1100 1101 这就是二进制结果
由于他们之间有对应关系,你完全可以使用查表的方式进行对应
即:建立十六进制数字和二进制数据之间的对应表,根据十六进制数查找对应的二进制,反过来依然;
楼上的方法是因为他不明白进制之间的关系,效率很低。
/*思想:一般16进制化成2进制,每个16进制数化成2进制后先写成4个数字,
每4个4个并起来后再把前面的0去掉
(比如16进制数12A,先把1化成0001,2化成0010,A化成1010,合起来是000100101010,去掉前面的0后就是100101010,就是12A的2进制数)*/
#include
#include
void judge(char c)
{
if(c=='0')
printf("%d%d%d%d",0,0,0,0);
else if(c=='1')
printf("%d%d%d%d",0,0,0,1);
else if(c=='2')
printf("%d%d%d",0,0,10
);
else if(c=='3')
printf("%d%d%d",0,0,11);
else if(c=='4')
printf("%d%d",0,100);
else if(c=='5')
printf("%d%d",0,101);
else if(c=='6')
printf("%d%d",0,110);
else if(c=='7')
printf("%d%d",0,111);
else if(c=='8')
printf("%d",1000);
else if(c=='9')
printf("%d",1001);
else if(c=='A')
printf("%d",1010);
else if(c=='B')
printf("%d",1011);
else if(c=='C')
printf("%d",1100);
else if(c=='D')
printf("%d",1101);
else if(c=='E')
printf("%d",1110);
else if(c=='F')
printf("%d",1111);
}
void first(char c)/*第一个16进制数转化为2进制*/
{
if(c=='1')
printf("%d",1);
else if(c=='2')
printf("%d",10);
else if(c=='3')
printf("%d",11);
else if(c=='4')
printf("%d",100);
else if(c=='5')
printf("%d",101);
else if(c=='6')
printf("%d",110);
else if(c=='7')
printf("%d",111);
else if(c=='8')
printf("%d",1000);
else if(c=='9')
printf("%d",1001);
else if(c=='A')
printf("%d",1010);
else if(c=='B')
printf("%d",1011);
else if(c=='C')
printf("%d",1100);
else if(c=='D')
printf("%d",1101);
else if(c=='E')
printf("%d",1110);
else if(c=='F')
printf("%d",1111);
}
main()
{
int i,j,l;
char x[81];
printf("输入16进制的数(用大写字母表示A、B、C、D、E、F),数字长度不超过一行\n");
while(scanf("%s",&x)!=EOF)
{
printf("输出转换成的2进制数\n");
i=0;
l=strlen(x);
if(x[i]=='0')
i++;
first(x[i]);
for(j=i+1;j<l;j++)
{
judge(x[j]);
if(j==l-1)
printf("\n");
}
printf("输入16进制的数\n");
}
}
。
。
[展开]
scanf用%X作参数读入十六进制, itoa参数里设置2进制输出成字符串, 打印出来就好了
先把16进制转变成十进制,把十进制变成二进制
/*思想:一般16进制化成2进制,每个16进制数化成2进制后先写成4个数字,
每4个4个并起来后再把前面的0去掉
(比如16进制数12A,先把1化成0001,2化成0010,A化成1010,合起来是000100101010,去掉前面的0后就是100101010,就是12A的2进制数)*/
#include
#include
void judge(char c)
{
if(c=='0')
printf("%d%d%d%d",0,0,0,0);
else if(c=='1')
printf("%d%d%d%d",0,0,0,1);
else if(c=='2')
printf("%d%d%d",0,0,10
);
else if(c=='3')
printf("%d%d%d",0,0,11);
else if(c=='4')
printf("%d%d",0,100);
else if(c=='5')
printf("%d%d",0,101);
else if(c=='6')
printf("%d%d",0,110);
else if(c=='7')
printf("%d%d",0,111);
else if(c=='8')
printf("%d",1000);
else if(c=='9')
printf("%d",1001);
else if(c=='A')
printf("%d",1010);
else if(c=='B')
printf("%d",1011);
else if(c=='C')
printf("%d",1100);
else if(c=='D')
printf("%d",1101);
else if(c=='E')
printf("%d",1110);
else if(c=='F')
printf("%d",1111);
}
void first(char c)/*第一个16进制数转化为2进制*/
{
if(c=='1')
printf("%d",1);
else if(c=='2')
printf("%d",10);
else if(c=='3')
printf("%d",11);
else if(c=='4')
printf("%d",100);
else if(c=='5')
printf("%d",101);
else if(c=='6')
printf("%d",110);
else if(c=='7')
printf("%d",111);
else if(c=='8')
printf("%d",1000);
else if(c=='9')
printf("%d",1001);
else if(c=='A')
printf("%d",1010);
else if(c=='B')
printf("%d",1011);
else if(c=='C')
printf("%d",1100);
else if(c=='D')
printf("%d",1101);
else if(c=='E')
printf("%d",1110);
else if(c=='F')
printf("%d",1111);
}
main()
{
int i,j,l;
char x[81];
printf("输入16进制的数(用大写字母表示A、B、C、D、E、F),数字长度不超过一行\n");
while(scanf("%s",&x)!=EOF)
{
printf("输出转换成的2进制数\n");
i=0;
l=strlen(x);
if(x[i]=='0')
i++;
first(x[i]);
for(j=i+1;j<l;j++)
{
judge(x[j]);
if(j==l-1)
printf("\n");
}
printf("输入16进制的数\n");
}
}
。
。
[展开]