C语言如何把一个十六进制数转换为二进制数组输出
答案:5 悬赏:30 手机版
解决时间 2021-02-06 05:24
- 提问者网友:沦陷
- 2021-02-05 17:03
C语言如何把一个十六进制数转换为二进制数组输出
最佳答案
- 五星知识达人网友:人间朝暮
- 2021-02-05 17:50
楼下的程序应该是将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了,可能程序中有些错误,但是进制转换算法本身是没有问题的,也许可以参考一下,希望对楼主有所帮助,早日解决问题
#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楼网友:摆渡翁
- 2021-02-05 21:13
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 & "0
- 2楼网友:迷人又混蛋
- 2021-02-05 20:46
#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);
}
}
- 3楼网友:独钓一江月
- 2021-02-05 20:28
有一个非常简单的算法,直接映射:
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0#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楼网友:西风乍起
- 2021-02-05 19:19
#include
#include
#include
void f(int a,int b,char s[])
{ char r[17];
int i,n,t,k;
for(n=strlen(s)-1,i=t=0;*(s+i)!='\0';i++,n--)
{ if(*(s+i)<='9')
t+=(*(s+i)-'0')*int(pow(a,n));
else
t+=(*(s+i)-'a'+10)*int(pow(a,n));
}
for(i=0;t!=0;i++)
{ k=t%b;
if(k>9)r[i]='a'+k-10;
else r[i]='0'+k;
t/=b;
}
r[i]='\0';
s=strrev(r);
printf("%s",s);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯