user-0 提问: 急求一个可使用的C语言代码，有关进制的转换

回复:
user: user-1
content: 引用 5 楼 Const_User的回复:最终版本：（修改了一下）  #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #define SIZE 33 int check(char[]);//检查输入数字的合法性，并且返回进制 void toB(int,int,char[],int); void OtoB(char[],int); void DtoB(char[],int); void HtoB(char[],int); void toO(int,int,char[],int); void BtoO(char[],int); void DtoO(char[],int); void HtoO(char[],int); void toD(int,int,char[],int); void BtoD(char[],int); void OtoD(char[],int); void HtoD(char[],int); void toH(int,int,char[],int); void BtoH(char[],int); void OtoH(char[],int); void DtoH(char[],int); void trans(int,int); int AtoI(char); int main(void) { int i,j; char arr[SIZE]; while(i=check(arr)) { printf("请输入您想转换为的进制数(以数字0结束输出)：__\b\b"); scanf("%d",&j); while(j) { switch(j) { case 2:toB(i,j,arr,strlen(arr));break; case 8:toO(i,j,arr,strlen(arr));break; case 10:toD(i,j,arr,strlen(arr));break; case 16:toH(i,j,arr,strlen(arr));break; default: printf("您所输入的数制错误，请输入2、8、10、16！"); } putchar('\n'); printf("请输入您想转换为的进制数(以数字0结束输出)：__\b\b"); scanf("%d",&j); } /*for(int i=0;*(arr+i);i++) *(arr+i)='\0';*/ getchar(); } return 0; } int check(char c_arr[]) { int j; char arr[SIZE]={0}; printf("您的输入为（按两下回车键结束输出）："); while(gets(c_arr)&&c_arr[0])//在新一行不用输任何字符，只需按下回车键结束输入 { 	strcpy(arr,c_arr); if(c_arr[0]=='B') j=2; else if(c_arr[0]=='0'&&(c_arr[1]=='x'||c_arr[1]=='X')) j=16; else if(c_arr[0]=='0') j=8; else if(c_arr[0]>'0'&&c_arr[0]<='9') j=10; else { printf("您的输入有误，请按照如下格式输入：B101、0302、324、0x123、0X123!\n"); printf("您的输入为（按两下回车键结束输出）："); continue; } } strcpy(c_arr,arr); return j; } void toB(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的二进制数为：%*s\n",size-1,c_arr+1); else switch(src) { case 8:OtoB(c_arr,size);break; case 10:DtoB(c_arr,size);break; case 16:HtoB(c_arr,size); } } void OtoB(char c_arr[],int size) { int i,count,sum; printf("输出的二进制数为："); for(i=1,sum=0,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(8,count); trans(sum,2); } void DtoB(char c_arr[],int size) { int i; printf("输出的二进制数为："); trans(atoi(c_arr),2); } void HtoB(char c_arr[],int size) { int i,count,sum; printf("输出的二进制数为："); for(i=2,sum=0,count=size-3;i<size;i++,count--) sum+=AtoI(c_arr[i])*pow(16,count); trans(sum,2); }   void trans(int c_ch,int sys) { if(c_ch>=sys) trans(c_ch/sys,sys); switch(c_ch%sys) { case 10:printf("a");break; case 11:printf("b");break; case 12:printf("a");break; case 13:printf("a");break; case 14:printf("a");break; case 15:printf("a");break; default:printf("%d",c_ch%sys); } }   void toO(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的八进制数为：%*s\n",size-1,c_arr+1); else switch(src) { case 2:BtoO(c_arr,size);break; case 10:DtoO(c_arr,size);break; case 16:HtoO(c_arr,size); } } void BtoO(char c_arr[],int size) { int i,count,sum; printf("输出的八进制数为："); for(i=1,sum=0,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(2,count); trans(sum,8); } void DtoO(char c_arr[],int size) { int i; printf("输出的八进制数为："); trans(atoi(c_arr),8); } void HtoO(char c_arr[],int size) { int i,count,sum; printf("输出的八进制数为："); for(i=2,sum=0,count=size-3;i<size;i++,count--) sum+=AtoI(c_arr[i])*pow(16,count); trans(sum,8); } void toD(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的十进制数为：%*s\n",size,c_arr); else switch(src) { case 2:BtoD(c_arr,size);break; case 8:OtoD(c_arr,size);break; case 16:HtoD(c_arr,size); } } void BtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(2,count); printf("%d",sum); } void OtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(8,count); printf("%d",sum); } void HtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=2,count=size-3;i<size;i++,count--) sum+=AtoI(c_arr[i])*pow(16,count); printf("%d",sum); } void toH(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的十六进制数为：%*s\n",size-2,c_arr+2); else switch(src) { case 2:BtoH(c_arr,size);break; case 8:OtoH(c_arr,size);break; case 10:DtoH(c_arr,size); } } void BtoH(char c_arr[],int size) { int i,sum=0,count; printf("输出的十六进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(2,count); trans(sum,16); } void OtoH(char c_arr[],int size) { int i,sum=0,count; printf("输出的十六进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(8,count); trans(sum,16); } void DtoH(char c_arr[],int size) { printf("输出的十六进制数为："); trans(atoi(c_arr),16); } int AtoI(char c_ch) { 	int i; 	switch(c_ch) 	{ 	case 'a':i=10;break; 	case 'b':i=11;break; 	case 'c':i=12;break; 	case 'd':i=13;break; 	case 'e':i=14;break; 	case 'f':i=15;break; 	default:i=c_ch-'0'; 	} 	return i; }  转16的全错了啊啊啊啊啊啊

user: user-2
content: 仅供参考#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-3
content: 热心人真多。。。

user: user-4
content: 最终版本：（修改了一下）  #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #define SIZE 33 int check(char[]);//检查输入数字的合法性，并且返回进制 void toB(int,int,char[],int); void OtoB(char[],int); void DtoB(char[],int); void HtoB(char[],int); void toO(int,int,char[],int); void BtoO(char[],int); void DtoO(char[],int); void HtoO(char[],int); void toD(int,int,char[],int); void BtoD(char[],int); void OtoD(char[],int); void HtoD(char[],int); void toH(int,int,char[],int); void BtoH(char[],int); void OtoH(char[],int); void DtoH(char[],int); void trans(int,int); int AtoI(char); int main(void) { int i,j; char arr[SIZE]; while(i=check(arr)) { printf("请输入您想转换为的进制数(以数字0结束输出)：__\b\b"); scanf("%d",&j); while(j) { switch(j) { case 2:toB(i,j,arr,strlen(arr));break; case 8:toO(i,j,arr,strlen(arr));break; case 10:toD(i,j,arr,strlen(arr));break; case 16:toH(i,j,arr,strlen(arr));break; default: printf("您所输入的数制错误，请输入2、8、10、16！"); } putchar('\n'); printf("请输入您想转换为的进制数(以数字0结束输出)：__\b\b"); scanf("%d",&j); } /*for(int i=0;*(arr+i);i++) *(arr+i)='\0';*/ getchar(); } return 0; } int check(char c_arr[]) { int j; char arr[SIZE]={0}; printf("您的输入为（按两下回车键结束输出）："); while(gets(c_arr)&&c_arr[0])//在新一行不用输任何字符，只需按下回车键结束输入 { 	strcpy(arr,c_arr); if(c_arr[0]=='B') j=2; else if(c_arr[0]=='0'&&(c_arr[1]=='x'||c_arr[1]=='X')) j=16; else if(c_arr[0]=='0') j=8; else if(c_arr[0]>'0'&&c_arr[0]<='9') j=10; else { printf("您的输入有误，请按照如下格式输入：B101、0302、324、0x123、0X123!\n"); printf("您的输入为（按两下回车键结束输出）："); continue; } } strcpy(c_arr,arr); return j; } void toB(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的二进制数为：%*s\n",size-1,c_arr+1); else switch(src) { case 8:OtoB(c_arr,size);break; case 10:DtoB(c_arr,size);break; case 16:HtoB(c_arr,size); } } void OtoB(char c_arr[],int size) { int i,count,sum; printf("输出的二进制数为："); for(i=1,sum=0,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(8,count); trans(sum,2); } void DtoB(char c_arr[],int size) { int i; printf("输出的二进制数为："); trans(atoi(c_arr),2); } void HtoB(char c_arr[],int size) { int i,count,sum; printf("输出的二进制数为："); for(i=2,sum=0,count=size-3;i<size;i++,count--) sum+=AtoI(c_arr[i])*pow(16,count); trans(sum,2); }   void trans(int c_ch,int sys) { if(c_ch>=sys) trans(c_ch/sys,sys); switch(c_ch%sys) { case 10:printf("a");break; case 11:printf("b");break; case 12:printf("a");break; case 13:printf("a");break; case 14:printf("a");break; case 15:printf("a");break; default:printf("%d",c_ch%sys); } }   void toO(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的八进制数为：%*s\n",size-1,c_arr+1); else switch(src) { case 2:BtoO(c_arr,size);break; case 10:DtoO(c_arr,size);break; case 16:HtoO(c_arr,size); } } void BtoO(char c_arr[],int size) { int i,count,sum; printf("输出的八进制数为："); for(i=1,sum=0,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(2,count); trans(sum,8); } void DtoO(char c_arr[],int size) { int i; printf("输出的八进制数为："); trans(atoi(c_arr),8); } void HtoO(char c_arr[],int size) { int i,count,sum; printf("输出的八进制数为："); for(i=2,sum=0,count=size-3;i<size;i++,count--) sum+=AtoI(c_arr[i])*pow(16,count); trans(sum,8); } void toD(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的十进制数为：%*s\n",size,c_arr); else switch(src) { case 2:BtoD(c_arr,size);break; case 8:OtoD(c_arr,size);break; case 16:HtoD(c_arr,size); } } void BtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(2,count); printf("%d",sum); } void OtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(8,count); printf("%d",sum); } void HtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=2,count=size-3;i<size;i++,count--) sum+=AtoI(c_arr[i])*pow(16,count); printf("%d",sum); } void toH(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的十六进制数为：%*s\n",size-2,c_arr+2); else switch(src) { case 2:BtoH(c_arr,size);break; case 8:OtoH(c_arr,size);break; case 10:DtoH(c_arr,size); } } void BtoH(char c_arr[],int size) { int i,sum=0,count; printf("输出的十六进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(2,count); trans(sum,16); } void OtoH(char c_arr[],int size) { int i,sum=0,count; printf("输出的十六进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(8,count); trans(sum,16); } void DtoH(char c_arr[],int size) { printf("输出的十六进制数为："); trans(atoi(c_arr),16); } int AtoI(char c_ch) { 	int i; 	switch(c_ch) 	{ 	case 'a':i=10;break; 	case 'b':i=11;break; 	case 'c':i=12;break; 	case 'd':i=13;break; 	case 'e':i=14;break; 	case 'f':i=15;break; 	default:i=c_ch-'0'; 	} 	return i; }

user: user-4
content: [size=24px改正后的代码][/size]  #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #define SIZE 33 int check(char[]);//检查输入数字的合法性，并且返回进制 void toB(int,int,char[],int); void OtoB(char[],int); void DtoB(char[],int); void HtoB(char[],int); void toO(int,int,char[],int); void BtoO(char[],int); void DtoO(char[],int); void HtoO(char[],int); void toD(int,int,char[],int); void BtoD(char[],int); void OtoD(char[],int); void HtoD(char[],int); void toH(int,int,char[],int); void BtoH(char[],int); void OtoH(char[],int); void DtoH(char[],int); void trans(int,int); int main(void) { int i,j; char arr[SIZE]; while(i=check(arr)) { printf("请输入您想转换为的进制数(以数字0结束输出)：__\b\b"); scanf("%d",&j); while(j) { switch(j) { case 2:toB(i,j,arr,strlen(arr));break; case 8:toO(i,j,arr,strlen(arr));break; case 10:toD(i,j,arr,strlen(arr));break; case 16:toH(i,j,arr,strlen(arr));break; default: printf("您所输入的数制错误，请输入2、8、10、16！"); } putchar('\n'); printf("请输入您想转换为的进制数(以数字0结束输出)：__\b\b"); scanf("%d",&j); } /*for(int i=0;*(arr+i);i++) *(arr+i)='\0';*/ getchar(); } return 0; } int check(char c_arr[]) { char c; int i,j; char arr[SIZE]={0}; printf("您的输入为（按两下回车键结束输出）："); while(gets(c_arr)&&c_arr[0])//在新一行不用输任何字符，只需按下回车键结束输入 { 	strcpy(arr,c_arr); if(c_arr[0]=='B') j=2; else if(c_arr[0]=='0'&&(c_arr[1]=='x'||c_arr[1]=='X')) j=16; else if(c_arr[0]=='0') j=8; else if(c_arr[0]>'0'&&c_arr[0]<='9') j=10; else { printf("您的输入有误，请按照如下格式输入：B101、0302、324、0x123、0X123!\n"); printf("您的输入为（按两下回车键结束输出）："); continue; } } strcpy(c_arr,arr); return j; } void toB(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的二进制数为：%*s\n",size-1,c_arr+1); else switch(src) { case 8:OtoB(c_arr,size);break; case 10:DtoB(c_arr,size);break; case 16:HtoB(c_arr,size); } } void OtoB(char c_arr[],int size) { int i,count,sum; printf("输出的二进制数为："); for(i=1,sum=0,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(8,count); trans(sum,2); } void DtoB(char c_arr[],int size) { int i; printf("输出的二进制数为："); trans(atoi(c_arr),2); } void HtoB(char c_arr[],int size) { int i,count,sum; printf("输出的二进制数为："); for(i=2,sum=0,count=size-3;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(16,count); trans(sum,2); }   void trans(int c_ch,int sys) { if(c_ch>=sys) trans(c_ch/sys,sys); switch(c_ch%sys) { case 10:printf("a");break; case 11:printf("b");break; case 12:printf("a");break; case 13:printf("a");break; case 14:printf("a");break; case 15:printf("a");break; default:printf("%d",c_ch%sys); } }   void toO(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的八进制数为：%*s\n",size-1,c_arr+1); else switch(src) { case 2:BtoO(c_arr,size);break; case 10:DtoO(c_arr,size);break; case 16:HtoO(c_arr,size); } } void BtoO(char c_arr[],int size) { int i,count,sum; printf("输出的八进制数为："); for(i=1,sum=0,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(2,count); trans(sum,8); } void DtoO(char c_arr[],int size) { int i; printf("输出的八进制数为："); trans(atoi(c_arr),8); } void HtoO(char c_arr[],int size) { int i,count,sum; printf("输出的八进制数为："); for(i=2,sum=0,count=size-3;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(16,count); trans(sum,8); } void toD(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的十进制数为：%*s\n",size,c_arr); else switch(src) { case 2:BtoD(c_arr,size);break; case 8:OtoD(c_arr,size);break; case 16:HtoD(c_arr,size); } } void BtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(2,count); printf("%d",sum); } void OtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(8,count); printf("%d",sum); } void HtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=2,count=size-3;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(16,count); printf("%d",sum); } void toH(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的十六进制数为：%*s\n",size-2,c_arr+2); else switch(src) { case 2:BtoH(c_arr,size);break; case 8:OtoH(c_arr,size);break; case 10:DtoH(c_arr,size); } } void BtoH(char c_arr[],int size) { int i,sum=0,count; printf("输出的十六进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(2,count); trans(sum,16); } void OtoH(char c_arr[],int size) { int i,sum=0,count; printf("输出的十六进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*pow(8,count); trans(sum,16); } void DtoH(char c_arr[],int size) { printf("输出的十六进制数为："); trans(atoi(c_arr),16); }

user: user-4
content: 完整程序： #include<stdio.h> #include<string.h> #define SIZE 33 int check(char[]);//检查输入数字的合法性，并且返回进制 void toB(int,int,char[],int); void OtoB(char[],int); void DtoB(char[],int); void HtoB(char[],int); void toO(int,int,char[],int); void BtoO(char[],int); void DtoO(char[],int); void HtoO(char[],int); void toD(int,int,char[],int); void BtoD(char[],int); void OtoD(char[],int); void HtoD(char[],int); void toH(int,int,char[],int); void BtoH(char[],int); void OtoH(char[],int); void DtoH(char[],int); void trans(int,int); int main(void) { int i,j; char arr[SIZE]; while(i=check(arr)) { printf("请输入您想转换为的进制为(以数字0结束输出)：__\t\t%2d"); scanf("%d",&j); while(j) { switch(j) { case 2:toB(i,j,arr,strlen(arr));break; case 8:toO(i,j,arr,strlen(arr));break; case 10:toD(i,j,arr,strlen(arr));break; case 16:toH(i,j,arr,strlen(arr));break; default: printf("您所输入的数制错误，请输入2、8、10、16！"); } printf("请输入您想转换为的进制为(以数字0结束输出)：__\t\t%2d"); scanf("%d",&j); } } return 0; } int check(char c_arr[]) { char c; int i,j; printf("您的输入为："); while(scanf("%s",c_arr)&&c_arr[0])//在新一行不用输任何字符，只需按下回车键结束输入 { if(c_arr[0]=='B') j=2; else if(c_arr[0]=='0'&&(c_arr[1]=='x'||c_arr[1]=='X')) j=16; else if(c_arr[0]=='0') j=8; else if(c_arr[0]>0&&c_arr[0]<10) j=10; else { printf("您的输入有误，请按照如下格式输入：B101、0302、324、0x123、0X123!"); scanf("%*s"); continue; } } return j; } void toB(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的二进制数为：%*s\n",size-1,c_arr+1); else switch(src) { case 8:OtoB(c_arr,size);break; case 10:DtoB(c_arr,size);break; case 16:HtoB(c_arr,size); } } void OtoB(char c_arr[],int size) { int i; printf("输出的二进制数为："); for(i=1;i<size;i++) trans(c_arr[i]-'0',2); } void DtoB(char c_arr[],int size) { int i; printf("输出的二进制数为："); trans(atoi(c_arr),2); } void HtoB(char c_arr[],int size) { int i; printf("输出的二进制数为："); for(i=1;i<size;i++) trans(c_arr[i]-'0',2); } void trans(int c_ch,int sys) { if(c_ch/sys>=sys) trans(c_ch/sys,sys); printf("%d",c_ch%sys); } void toO(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的八进制数为：%*s\n",size-1,c_arr+1); else switch(src) { case 8:BtoO(c_arr,size);break; case 10:DtoO(c_arr,size);break; case 16:HtoO(c_arr,size); } } void BtoO(char c_arr[],int size) { int i,sum,count; printf("输出的八进制数为："); for(i=1,sum=0,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*power(2,count); trans(sum,8); } void DtoO(char c_arr[],int size) { int i; printf("输出的八进制数为："); trans(atoi(c_arr),8); } void HtoO(char c_arr[],int size) { int i,count; printf("输出的八进制数为："); for(i=2,sum=0,count=size-3;i<size;i++,count--) sum+=(c_arr[i]-'0')*power(16,count) trans(sum,8); } void toD(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的十进制数为：%*s\n",size,c_arr); else switch(src) { case 8:BtoD(c_arr,size);break; case 10:OtoD(c_arr,size);break; case 16:HtoD(c_arr,size); } } void BtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*power(2,count); printf("%d",sum); } void OtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*power(8,count); printf("%d",sum); } void HtoD(char c_arr[],int size) { int i,sum=0,count; printf("输出的十进制数为："); for(i=2,count=size-3;i<size;i++,count--) sum+=(c_arr[i]-'0')*power(16,count); printf("%d",sum); } void toH(int src,int dest,char c_arr[],int size) { if(src==dest) printf("输出的十六进制数为：%*s\n",size-2,c_arr+2); else switch(src) { case 8:BtoH(c_arr,size);break; case 10:OtoH(c_arr,size);break; case 16:DtoH(c_arr,size); } } void BtoH(char c_arr[],int size) { int i,sum=0,count; printf("输出的十六进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*power(2,count); trans(sum,16); } void OtoH(char c_arr[],int size) { int i,sum=0,count; printf("输出的十六进制数为："); for(i=1,count=size-2;i<size;i++,count--) sum+=(c_arr[i]-'0')*power(8,count); trans(sum,16); } void DtoH(char c_arr[],int size) { int i,sum=0,count; printf("输出的十六进制数为："); trans(atoi(c_arr),16); }

user: user-5
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  int Hex2Octal(char *tInputNum) { 	int x = strtol(tInputNum, NULL, 16);  	printf("Octal: %o\n", x);	 }   int Hex2Bibary(char tInputNum[20]) { 	int number,i,j,s=0; 	int result = 0; 	int b[50],p[30];  	memcpy(tInputNum, &tInputNum[2], sizeof(tInputNum)-2);  	//printf("%s\n", tInputNum); 	for(number=0; ;number++) 	{ 		if(tInputNum[number] == '\0') 			break; 	}  	for(i=0; i<number; i++) 	{ 		if(tInputNum[i]<='9' && tInputNum[i]>='0') 			b[i] = tInputNum[i]-48; 		else 		{ 			switch(tInputNum[i]) 			{ 				case 'A': 				case 'a': 					b[i] = 10; 				break;	 				case 'B': 				case 'b': 					b[i] = 11; 				break;	 				case 'C': 				case 'c': 					b[i] = 12; 				break;	 				case 'D': 				case 'd': 					b[i] = 13; 				break;	 				case 'E': 				case 'e': 					b[i] = 14; 				break;	 				case 'F': 				case 'f': 					b[i] = 15; 				break;	 				default:  					s=1; 				break;		  			} 		} 	}  	for(i=0; i< number; i++) 	{ 		//printf("%d", b[i]); 	} 	//putchar(10);  	for(j=number-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("wrong num\n"); 	else{ 		printf("Binary: ");  		//printf("%d\n", j-1); 		for(number=j-1; number>=0; number--) 		{ 			printf("%d", p[number]); 		} 		putchar(10); 	} }  int Hex2Decimal(char * tInputNum) { 	int x = strtol(tInputNum, NULL, 16);  	printf("Decimal: %d\n", x);	  }  int main() { 	int num; 	char mInputNum[20]; 	memset(mInputNum, 0, sizeof(mInputNum));  	scanf("%s", mInputNum); 	printf("mInputNum = [%s]\n", mInputNum);  	num = strlen(mInputNum);  	int i; 	for(i=0; i<num; i++) 	{ 		if( (mInputNum[i]<='9' && mInputNum[i]>= '0')  			|| (mInputNum[i]>= 'a' && mInputNum[i]<='f') 			|| (mInputNum[i]>= 'A' && mInputNum[i]<='F') 			|| mInputNum[i] == 'x' || mInputNum[i] == 'X') 		{}else{ 			printf("Wrong Input, Bye-Bye [%c]\n", mInputNum[i]);	   		}	 	}  	switch(mInputNum[0]) 	{ 		case '0': 			switch(mInputNum[1]) 			{ 				case 'x': 				//16	 					Hex2Octal(mInputNum); 					Hex2Bibary(mInputNum); 					Hex2Decimal(mInputNum); 				break; 				default: 				//8  				for(i=1; i< num; i++) 				{ 					if(mInputNum[1]>='0' && mInputNum[1]<= '7') 					{  					}else{ 						printf("for 8 Wrong Input, Bye-Bye[%c]\n", mInputNum[i]);	   					} 				}  				break; 			} 		break; 		case 'B': 				  		break; 		default:  		break; 	} }   写了一部分

user: user-4
content: #include<stdio.h> #define SIZE 33 int check(char[],int);//检查输入数字的合法性，并且返回进制 void toB(int,int,char[],int); void OtoB(char[],int); void DtoB(char[],int); void HtoB(char[],int); void toO(int,int,char[],int); void BtoO(char[],int); void DtoO(char[],int); void HtoO(char[],int); void toD(int,int,char[],int); void BtoD(char[],int); void OtoD(char[],int); void HtoD(char[],int); void toH(int,int,char[],int); void BtoH(char[],int); void OtoH(char[],int); void DtoH(char[],int); int main(void) { int i,j; char arr[SIZE]; while(i=check(arr,SIZE)) { printf("请输入您想转换为的进制为(以数字0结束输出)：__\t\t%2d"); scanf("%d",&j); while(j) { switch(j) { case 2:toB(i,j,arr,SIZE);break; case 8:toO(i,j,arr,SIZE);break; case 10:toD(i,j,arr,SIZE);break; case 16:toH(i,j,arr,SIZE);break; default: printf("您所输入的数制错误，请输入2、8、10、16！"); } printf("请输入您想转换为的进制为(以数字0结束输出)：__\t\t%2d"); scanf("%d",&j); } } return 0; } int check(char c_arr[],int size) { char c; int i,j; printf("您的输入为："); while((c=getchar())!='\n') { for(i=0;i<size;i++) c_arr[i]=c; if(c_arr[0]=='B') j=2; else if(c_arr[0]=='0'&&(c_arr[1]=='x'||c_arr[1]=='X')) j=16; else if(c_arr[0]=='0') j=8; else if(c_arr[0]>0&&c_arr[0]<10) j=10; else { printf("您的输入有误，请按照如下格式输入：B101、0302、324、0x123、0X123!"); scanf("%*s"); continue; } } return j; } /*没写完*/ void toB(int src,int dest,char c_arr[],int size) { if(src==dest)  }