用c编写的进制转换
来源:互联网 发布:气gou配件淘宝交易 编辑:程序博客网 时间:2024/05/18 13:23
/*这个程序包含的功能有:1.任意字符转化二进制ASCII码,2.二进制,八进制,十进制,十六进制的相互转换,3转换结果会输出到D://result.txt中*/
/*这个程序是我上了数电课后有感而发所做的,由于水平问题做了很久而且还有很多的不足,但是基本能用:)*/
#define SIZE 1000 //定义所用数组大小
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
void ChangeChar(char *s);
void Save(int s,int a);
void ChangeNum(long int m);
long int Change_Num(char *n);
void ChangeDec(int k);
void main()
{
int a=0;
long int m;
char s[SIZE];
char useless[2];
printf("请选择:/n");
printf("1:char->ASCII 2:10->2 3:2->10 4:2-8 5:2->16 6:8->2 7:16->2 8:Esc/n"); //用户选择
scanf("%d",&a); //输入选择
printf("请输入要转换的数据:/n"); //提示输入
switch(a)
{
case 1: gets(useless); //由于gets函数的定义问题,这个用来接收用户选择后的回车按键
gets(s); //这个用来接收输入的字符
//输出字符转ASCII码
ChangeChar(s);
break;
case 2: scanf("%d",&m); //输出十进制转二进制
ChangeNum(m);
break;
case 3: scanf("%s",s); //以字符数组形式接收二进制数,然后输出二进制转十进制
m=Change_Num(s);
printf("%d",m);
Save(m,1);
break;
case 4: scanf("%s",s); //以字符数组形式接收二进制数,输出二进制转八进制
m=Change_Num(s);
printf("%o",m);
Save(m,a);
break;
case 5: scanf("%s",s); //以字符数组形式接收二进制数,输出二进制转十六进制
m=Change_Num(s);
printf("%x",m);
Save(m,a);
break;
case 6: scanf("%o",&m); //输出八进制转二进制
ChangeNum(m);
break;
case 7: scanf("%x",&m); //输出十六进制转二进制
ChangeNum(m);
break;
case 8: //退出
break;
default: printf("You have enter the wrong key!/n"); //错误输入处理
break;
}
}
void ChangeChar(char *s)
{
int result[8]={0,0,0,0,0,0,0}; //定义一个接收转化单字后的二进制数
int i,j,k;
for(i=0;s[i]!='/0';i++)
{
for(j=7;j>=0;j--) //逐位转化,把单字转化为相应的ASCII码
{
result[j]=s[i]%2;
s[i]/=2;
}
for(k=0;k<8;k++) //输出转化后的单字ASCII码
{
printf("%d",result[k]);
Save(result[k],1); //将ASCII码写到txt中
}
printf(" ");
}
}
void ChangeNum(long int m) //别的进制转二进制
{
int i,a[SIZE];
if(m!=0)
{
for(i=SIZE-1;m!=0&&i>=0;i--) //从低位到高位
{
a[i]=m%2;
m/=2;
}
for(i+=1;i<SIZE;i++)
{
printf("%d",a[i]);
Save(a[i],1);
}
}
else
{
printf("%d",m);
Save(m,1);
}
}
long int Change_Num(char *n) //二进制转十进制
{
int i,k;
long int j=0;
k=strlen(n); //计算输入二进制的长度
for(i=0;k>0;k--,i++)
{
j+=(n[k-1]-48)*pow(2,i); //对字符进行演算化为1和0然后转化为十进制数
}
return(j);
}
void Save(int s,int a) //保存
{
FILE *fpt;
if((fpt=fopen("D://result.txt","at"))==NULL) //检查能否以写追加的方式打开或建立文件
{
printf("不能打开文件,按任意键退出!/n");
getch();
exit(1);
}
if(a==4)
{
fprintf(fpt,"%o",s); //八进制写入
}
else if(a==5)
{
fprintf(fpt,"%x",s); //十六进制写入
}
else
{
fprintf(fpt,"%d",s); //十进制写入
}
fclose(fpt);
}
- 用c编写的进制转换
- 用java语言编写进制转换
- 编写简单的16进制转换工具
- C#调用非托管C编写DLL的数据类型转换
- 用C编写的记事本
- 用C编写的记事本
- 使用数组,编写一个任意进制正整数转换为十进制的转换工具。
- 4.c语言的进制转换
- C语言基础 进制的转换
- c进制转换的一种方法
- C#进制转换
- c#-进制转换
- C.进制转换
- c++-进制转换
- 用vs2013编写C语言与编写C++的区别
- C语言编写注释转换问题
- C语言编写注释风格转换
- 用 c编写的一个学生成绩管理系统
- Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
- 各种init的比较分析
- OpenAT自行编码实现ftp client
- 多线程进程间通讯共享内存(Shared Memory with IPC with threads)
- Bitmap 与IplImage之间的转换问题
- 用c编写的进制转换
- erdas各版本破解 附9.2版license(还未验证)
- JNI 调用dll
- 由DWG地形图生成DEM
- 高斯-克吕格投影与地形图分带
- 【学习笔记】weblogic 数据源配置
- 我想成为一名编程手
- ENVI和ERDAS中自定义坐标系的方法
- 浅析C#编程中的内存管理