二进制八进制十进制十六进制互相转化的C语言源代码.docx
《二进制八进制十进制十六进制互相转化的C语言源代码.docx》由会员分享,可在线阅读,更多相关《二进制八进制十进制十六进制互相转化的C语言源代码.docx(26页珍藏版)》请在冰豆网上搜索。
二进制八进制十进制十六进制互相转化的C语言源代码
#include
#include
#include
voidD_B(int);
voidD_O(int);
voidD_X(int);
voidB_D(int);
voidB_O(int);
voidB_X(int);
voidO_B(int);
voidO_D(int);
voidO_X(int);
voidX_B(charr[],intk);
voidX_D(charr[],intk);
voidX_O(charr[],intk);
voidmain()
{
inti,j,k=0;
intq;
charr[10];
printf("+=============================================================+\n");
printf("|欢迎使用进制转换程序|\n");
printf("+=============================================================+\n");
printf("注:
本版本只做正整数的进制转换!
!
");
do
{
q=0;
//fflush(stdin);
printf("\n请选择需要被转换的进制:
\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");
scanf("%d",&i);
switch(i)
{
case1:
printf("\n请选择转换后的进制:
\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");
scanf("%d",&j);
switch(j)
{
case1:
printf("\n同进制之间不用转化!
\n");
q=1;
break;
case2:
printf("\n请输入您想要转化的数:
");
scanf("%d",&k);
B_O(k);
q=1;
break;
case3:
printf("\n请输入您想要转化的数:
");
scanf("%d",&k);
B_D(k);
q=1;
break;
case4:
printf("\n请输入您想要转化的数:
");
scanf("%d",&k);
B_X(k);
q=1;
break;
case0:
printf("谢谢使用!
!
");
}
break;
case2:
printf("\n请选择转换后的进制:
\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");
scanf("%d",&j);
switch(j)
{
case2:
printf("\n同进制之间不用转化!
\n");
q=1;
break;
case1:
printf("\n请输入您想要转化的数:
");
scanf("%d",&k);
O_B(k);
q=1;
break;
case3:
printf("\n请输入您想要转化的数:
");
scanf("%d",&k);
O_D(k);
q=1;
break;
case4:
printf("\n请输入您想要转化的数:
");
scanf("%d",&k);
O_X(k);
q=1;
break;
case0:
printf("谢谢使用!
!
");
}
break;
case3:
printf("\n请选择转换后的进制:
\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");
scanf("%d",&j);
switch(j)
{
case3:
printf("\n同进制之间不用转化!
\n");
q=1;
break;
case1:
printf("\n请输入您想要转化的数:
");
scanf("%d",&k);
D_B(k);
q=1;
break;
case2:
printf("\n请输入您想要转化的数:
");
scanf("%d",&k);
D_O(k);
q=1;
break;
case4:
printf("\n请输入您想要转化的数:
");
scanf("%d",&k);
D_X(k);
q=1;
break;
case0:
printf("谢谢使用!
!
");
}
break;
case4:
printf("\n请选择转换后的进制:
\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");
scanf("%d",&j);
switch(j)
{
case4:
printf("\n同进制之间不用转化!
\n");
q=1;
break;
case1:
printf("\n请输入您想要转化的数:
");
fflush(stdin);
gets(r);
for(k=0;;k++)
{
if(r[k]=='\0')
break;
}
X_B(r,k);
q=1;
break;
case2:
printf("\n请输入您想要转化的数:
");
fflush(stdin);
gets(r);
for(k=0;;k++)
{
if(r[k]=='\0')
break;
}
X_O(r,k);
q=1;
break;
case3:
printf("\n请输入您想要转化的数:
");
fflush(stdin);
gets(r);
for(k=0;;k++)
{
if(r[k]=='\0')
break;
}
X_D(r,k);
q=1;
break;
case0:
printf("谢谢使用!
!
");
}
break;
case0:
printf("\n谢谢使用!
\n");
}
}while(q==1);
}
///////以下为:
二进制转换为十进制,八进制,十六进制.
voidB_D(inta)
{
inti,s=0;
intresult=0;
for(i=1;a!
=0;i*=2)
{
if(a%10>1)
{
s=1;
break;
}
else
{
result+=(a%10)*i;
a=a/10;
}
}
if(s==1)
printf("您的输入有误!
请重新输入\n");
else
printf("\n转换后的数为:
%d\n",result);
}
voidB_O(inta)
{
inti,j,k,s=0;
intp[30];
intresult=0;
for(i=1;a!
=0;i*=2)
{
if(a%10>1)
{
s=1;
break;
}
else
{
result+=(a%10)*i;
a=a/10;
}
}
for(j=0;result!
=0;j++)
{
p[j]=result%8;
result=result/8;
}
if(s==1)
printf("您的输入有误!
请重新输入\n");
else
{
printf("\n转换后的数为:
");
for(k=j-1;k>=0;k--)
{
printf("%d",p[k]);
}
printf("\n");
}
}
voidB_X(inta)
{
inti,j,k,s=0;
charp[30];
intresult=0;
for(i=1;a!
=0;i*=2)
{
if(a%10>1)
{
s=1;
break;
}
else
{
result+=(a%10)*i;
a=a/10;
}
}
for(j=0;result!
=0;j++)
{
p[j]=result%16;
result=result/16;
if(p[j]>10)
{
switch(p[j])
{
case10:
p[j]='A';
break;
case11:
p[j]='B';
break;
case12:
p[j]='C';
break;
case13:
p[j]='D';
break;
case14:
p[j]='E';
break;
case15:
p[j]='F';
break;
}
}
elsep[j]+=48;
}
if(s==1)
printf("您的输入有误!
请重新输入\n");
else
{
printf("\n转换后的数为:
");
for(k=j-1;k>=0;k--)
{
printf("%c",p[k]);
}
printf("\n");
}
}
///////以下为:
八进制转换为二进制,十进制,十六进制.
voidO_B(inta)
{
inti,j,k,s=0;
intresult=0;
intp[30];
for(i=1;a!
=0;i*=8)
{if(a%10>7)
{
s=1;
break;
}
else
{
result+=(a%10)*i;
a=a/10;
}
}
for(j=0;result!
=0;j++)
{
p[j]=result%2;
result=result/2;
}
if(s==1)
printf("您的输入有误!
请重新输入\n");
else
{
printf("\n转换后的数为:
");
for(k=j-1;k>=0;k--)
{
printf("%d",p[k]);
}
printf("\n");
}
}
voidO_D(inta)
{
inti,s=0;
intresult=0;
for(i=1;a!
=0;i*=8)
{
if(a%10>7)
{
s=1;
break;
}
else
{
result+=(a%10)*i;
a=a/10;
}
}
if(s==1)
printf("您的输入有误!
请重新输入\n");
else
{
printf("\n转换后的数为:
%d\n",result);
}
}
voidO_X(inta)
{
inti,j,k,s=0;
charp[30];
intresult=0;
for(i=1;a!
=0;i*=8)
{
if(a%10>7)
{
s=1;
break;
}
else
{
result+=(a%10)*i;
a=a/10;
}
}
for(j=0;result!
=0;j++)
{
p[j]=result%16;
result=result/16;
if(p[j]<10)
p[j]+=48;
else
{
switch(p[j])
{
case10:
p[j]='A';
break;
case11:
p[j]='B';
break;
case12:
p[j]='C';
break;
case13:
p[j]='D';
break;
case14:
p[j]='E';
break;
case15:
p[j]='F';
break;
}
}
}
if(s==1)
printf("您的输入有误!
请重新输入\n");
else
{
printf("\n转换后的数为:
");
for(k=j-1;k>=0;k--)
{
printf("%c",p[k]);
}
printf("\n");
}
}
///////以下为:
十六进制转换为十进制,二进制,八进制.
voidX_D(chara[],intk)
{
inti,j,s=0;
intresult=0;
intb[50];
for(i=0;i{
if(a[i]<='9'&&a[i]>='1')
{b[i]=a[i]-48;
}
else
{
switch(a[i])
{
case'A':
b[i]=10;
break;
case'B':
b[i]=11;
break;
case'C':
b[i]=12;
break;
case'D':
b[i]=13;
break;
case'E':
b[i]=14;
break;
case'F':
b[i]=15;
break;
case'a':
b[i]=10;
break;
case'b':
b[i]=11;
break;
case'c':
b[i]=12;
break;
case'd':
b[i]=13;
break;
case'e':
b[i]=14;
break;
case'f':
b[i]=15;
break;
default:
s=1;
}
}
}
for(i=1,j=k-1;j>=0;j--,i*=16)
{
result+=b[j]*i;
}
if(s==1)
printf("您的输入有误!
请重新输入\n");
else
{
printf("\n转换后的数为:
%d",result);
}
}
voidX_B(chara[],intk)
{
inti,j,s=0;
intresult=0;
intb[50];
intp[30];
for(i=0;i{
if(a[i]<='9'&&a[i]>='1')
b[i]=a[i]-48;
else
{
switch(a[i])
{
case'A':
b[i]=10;
break;
case'B':
b[i]=11;
break;
case'C':
b[i]=12;
break;
case'D':
b[i]=13;
break;
case'E':
b[i]=14;
break;
case'F':
b[i]=15;
break;
case'a':
b[i]=10;
break;
case'b':
b[i]=11;
break;
case'c':
b[i]=12;
break;
case'd':
b[i]=13;
break;
case'e':
b[i]=14;
break;
case'f':
b[i]=15;
break;
default:
s=1;
}
}
}
for(j=k-1,i=1;j>=0;j--,i*=16)
{
result+=b[j]*i;
}
for(j=0;result!
=0;j++)
{
p[j]=result%2;
result=result/2;
}
if(s==1)
printf("您的输入有误!
请重新输入\n");
else
{
printf("\n转换后的数为:
");
for(k=j-1;k>=0;k--)
{
printf("%d",p[k]);
}
printf("\n");
}
}
voidX_O(chara[],intk)
{
inti,j,s=0;
intresult=0;
intb[30];
intp[30];
for(i=0;i{
if(a[i]<='9'&&a[i]>='1')
b[i]=a[i]-48;
else
{
switch(a[i])
{
case'A':
b[i]=10;
break;
case'B':
b[i]=11;
break;
case'C':
b[i]=12;
break;
case'D':
b[i]=13;
break;
case'E':
b[i]=14;
break;
case'F':
b[i]=15;
break;
case'a':
b[i]=10;
break;
case'b':
b[i]=11;
break;
case'c':
b[i]=12;
break;
case'd':
b[i]=13;
break;
case'e':
b[i]=14;
break;
case'f':
b[i]=15;
break;
default:
s=1;
}
}
}
for(j=k-1,i=1;j>=0;j--,i*=16)
{
result+=b[j]*i;
}
for(j=0;result!
=0;j++)
{
p[j]=result%8;
result=result/8;
}
if(s==1)
printf("您的输入有误!
请重新输入\n");
else
{
printf("\n转换后的数为:
");
for(k=j-1;k>=0;k--)
{
printf("%d",p[k]);
}
printf("\n");
}
}
///////以下为:
十进制转换为二进制,八进制,十六进制.
voidD_B(inta)
{
intj,k;
intp[30];
for(j=0;a!
=0;j++)
{
p[j]=a%2;
a=a/2;
}
printf("\n转换后的数为:
");
for(k=j-1;k>=0;k--)
{
printf("%d",p[k]);
}
printf("\n");
}
voidD_O(inta)
{
intj,k;
intp[30];
for(j=0;a!
=0;j++)
{
p[j]=a%8;
a=a/8;
}
printf("\n转换后的数为:
");
for(k=j-1;k>=0;k--)
{
printf("%d",p[k]);
}
printf("\n");
}
voidD_X(inta)
{
intj,k;
intp[30];
for(j=0;a!
=0;j++)
{
p[j]=a%16;
a=a/16;
if(p[j]<10)
p[j]+=48;
else
{
switch(p[j])
{
case10:
p[j]='A';
break;
case11:
p[j]='B';
break;
case12:
p[j]='C';
break;
case13:
p[j]='D';
break;
case14:
p[j]='E';
break;
case15:
p[j]='F';
break;
}
}
}
printf("\n转换后的数为:
");
for(k=j-1;k>=0;k--)
{
printf("%c",p[k]);
}
printf("\n");
}