C语言如何把一个十六进制数转换为二进制数组输出

如题所述

楼下的程序应该是将16进制转化为10进制数组,将其改进一下即可,也就是加上将十进制转换为二进制的程序段:全程序如下:
#include <stdio.h>
void main(
{
int i;
int m = 0;
char c[10];
char *r;
scanf("%s",c);
if(c[0]!='0'&&c[1]!='x'&&c[1]!='X')/*判断是不是十六进制数*/
{
printf("不是十六进制数\n");
}
else
{{
i = 2;
while (c[i]!='\0')
{
m = m*16+c[i]-'0';/*将十六进制数转换为十进制数*/
i++;
}
if(m=0)
printf("%d\n",0);
else
for(i=0;m!=0;i++)/*将十进制数转换为二进制数*/
{
*(r+i)=m%2;
m=m/2;
}
for(;i-->=0;)
printf("%d",*(r+i));/*输出二进制数*/
printf("\n");
}
}关于十六进制直接转换为二进制数,直接做很简单,但是用程序实现起来不容易,所以先转换为十进制,再转为二进制,虽有点笨,也算是一种方法吧呵呵,我好久没用c了,可能程序中有些错误,但是进制转换算法本身是没有问题的,也许可以参考一下,希望对楼主有所帮助,早日解决问题
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-04
#include <stdio.h>
void main()
{
int i;
int a = 0;
char c[10];
scanf("%s",c);
if(c[0]!='0'&&c[1]!='x')
{
printf("不是十六进制数\n");
}
else
{
i = 2;
while (c[i])
{
a = a*16+c[i]-'0';
i++;
}
printf("%d",a);
}
}本回答被提问者采纳
第2个回答  推荐于2017-10-07
有一个非常简单的算法,直接映射:
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111
每位十六进制数用四位二进制表示 。
例如:
(1DE)16 =(1 1101 1110)2
第3个回答  2013-03-09
#include <stdio.h>
void main()
{
int i=0;
int m = 0;
char c[10];
int r[8]={0};
scanf("%s",c);
if(c[0]!='0'&&c[1]!='x'&&c[1]!='X')/*判断是不是十六进制数*/
{
printf("不是十六进制数\n");
}
else
{ i = 2;
while (c[i]!='\0')
{
if(c[i]>='0' && c[i]<='9')
{
m = m*16+c[i]-'0';/*将十六进制数转换为十进制数*/
}
if(c[i]>='a' && c[i] <= 'f')
{
m = m*16+c[i]-'a'+10;
}
i++;
}
printf("i = %d\n",i);
printf("m = %d\n",m);
if(m==0){
printf("%d\n",0);
}
else{
for(i=0;m!=0;i++)/*将十进制数转换为二进制数*/
{
r[i]=m%2;
m=m/2;
}
for(i=7;i>=0;i--){
printf("%d",r[i]);
}
}
}
}
第4个回答  2010-05-21
Case "0": B = B & "0000"
Case "1": B = B & "0001"
Case "2": B = B & "0010"
Case "3": B = B & "0011"
Case "4": B = B & "0100"
Case "5": B = B & "0101"
Case "6": B = B & "0110"
Case "7": B = B & "0111"
Case "8": B = B & "1000"
Case "9": B = B & "1001"
Case "A": B = B & "1010"
Case "B": B = B & "1011"
Case "C": B = B & "1100"
Case "D": B = B & "1101"
Case "E": B = B & "1110"
相似回答