风雷编于2004年12月21日
***********************************************************************
进制转换工具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();
}
}