进制转换工具

感谢风雷兄编写代码

 ***********************************************************************
                             进制转换工具v1.0,风雷编于2004年12月21日 
 ************************************************************************/


#define len 50
#define NULL
#include <stdio.h>

/*   十进制转二进制数   */  
void covert_decimal_to_binary(int *p)   {
   int l,h=len-1,r=*p,k=0;
   int flag[len]={0};
   if(r==0)  
   printf("0000");
   while(r!=1)   {
       l=r%2;
       flag[h]=l;                     /*   flag为存储输出的二进制数的数组   */
       h--;
       r=r/2;
       k++;
       if((k+4)%4==0)
       k=0;
    }        
   for(;k<3;k++)   {
   printf("0");  
   }  
   flag[h]=1;  
   for(;h<len;h++)
   printf("%d",flag[h]);
}            

/*   二进制转十进制函数   */   
void covert_binary_to_decimal(char *p)   {
    int s=0,m=1,i=0,j;
    char k;
    while((*p)!='/0')   {
        p++;
        i++;
        j=i;
    }   
    for(i=j;i>0;i--)   {   
        p--;
        k=*p;
        s=s+((k-48)*m);
        m=m*2;     
        }
        printf("%d/n",s);                
 }

/*   十六进制转二进制   */
void covert_hex_to_binary(char *p)   {
    int i=0,k,*p1;  
    while((*p)!='/0')   {
        if((*p)-65<0)   {
        k=(int)(*p)-48;
        p1=&k;
        covert_decimal_to_binary(p1);
        p++;
    }
        else   {
        k=(int)(*p)-55;  
        p1=&(int)k;
        covert_decimal_to_binary(p1);
        p++;
    }
}
}   

/*   十进制转十六进制   */   
void covert_decimal_to_hex(int *p)   {
   int l,h=len-1,r=*p;
   int flag[len]={0};
   char y;
   while(r>=16)   {
       l=r%16;
       flag[h]=l;                    
       h--;
       r=r/16;
   }
   flag[h]=r;
   for(;h<len;h++)   {
       if(flag[h]<10)      
       printf("%d",flag[h]);
       else   {
           y=(char)(flag[h]+55);
           printf("%c",y);
       }
   }                  
}

/*   二进制转十六进制   */
void covert_binary_to_hex(char *p)  {
    int s=0,m=1,i=0,j;   
    char k;
    while((*p)!='/0')   {
        p++;
        i++;
        j=i;
    }   
    for(i=j;i>0;i--)   {   
        p--;
        k=*p;
        s=s+((int)(k-48)*m);
        m=m*2;     
    }
    covert_decimal_to_hex(&s);
}   

/*   十六进制转十进制   */
void covert_hex_to_decimal(char *p)   {
    int s=0,m=1,i=0,j;
    char k;
    while((*p)!='/0')   {
        p++;
        i++;
        j=i;
    }   
    for(i=j;i>0;i--)   {   
        p--;
        k=*p;
        if(k>'A')   {           
            s=s+((int)(k-55)*m);
            m=m*16;        
        }
        if(k<'A')   {
            s=s+((int)(k-48)*m);
            m=m*16;
        }
    }                               
    printf("%d/n",s);
}   
  
       

/*   数据输入函数:十进制   */
int scan_input_decimal(int a)   {
   printf("请输入你希望转换的数值/n");
   scanf("%d",&a);
   return(a);
}

/*   数据输入函数:二进制   */
void scan_input_binary(char *p2)   {
   printf("请输入你希望转换的数值/n");
   scanf("%s",p2);
}

/*   数据输入函数:十六进制  */ 
void scan_input_hex(char *p3)   {
   printf("请输入你希望转换的数值/n");
   scanf("%s",p3);

/*   主函数   */
int main()   {
   int num_in,a1,a5;
   int *p1=(int *)malloc(sizeof(int)),*p5=(int *)malloc(sizeof(int));
   char *p2,*p3,*p4,*p6;
   char store[len]={'0'};
   p2=p3=p4=p6=store;  

   printf(" 1.十进制转二进制/n");
   printf(" 2.二进制转十进制/n");
   printf(" 3.十六进制转二进制/n");
   printf(" 4.二进制转十六进制/n");
   printf(" 5.十进制转十六进制/n");
   printf(" 6.十六进制转十进制/n");
   printf(" 0.退出/n ");
   while(p1!=NULL&&p5!=NULL)   {
      printf("请选择转换类型/n");
      scanf("%d",&num_in);
      switch(num_in)   {
          case 0:
              printf("请直接关闭窗口/n");
              break;
          case 1:
              *p1=scan_input_decimal(a1);
              printf("你希望得到的数值为:/n");
              covert_decimal_to_binary(p1);
              printf("/n/n");
              printf("按任意键继续/n");
              break;
          case 2:        
              scan_input_binary(p2);          
              printf("你希望得到的数值为:/n");
              covert_binary_to_decimal(p2);
              printf("/n");
              printf("按任意键继续/n");
              break;
          case 3:        
              scan_input_hex(p3);          
              printf("你希望得到的数值为:/n");
              covert_hex_to_binary(p3);
              printf("/n/n");
              printf("按任意键继续/n");
              break;
          case 4:        
              scan_input_binary(p4);          
              printf("你希望得到的数值为:/n");             
              covert_binary_to_hex(p4);
              printf("/n/n");
              printf("按任意键继续/n");             
              break;
          case 5:        
              *p5=scan_input_decimal(a5);          
              printf("你希望得到的数值为:/n");
              covert_decimal_to_hex(p5);
              printf("/n/n");
              printf("按任意键继续/n");
              break;
          case 6:        
              scan_input_hex(p6);          
              printf("你希望得到的数值为:/n");
              covert_hex_to_decimal(p6);
              printf("/n/n");
              printf("按任意键继续/n");
              break;
          default:
              printf("输入错误! 按任意键继续/n");
          }    
          getch();
          }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

do2jiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值