c语言实现进制转换器
来源:互联网 发布:密度板的甲醛 知乎 编辑:程序博客网 时间:2024/05/01 22:18
在了解了c语言中atoi和itoa函数以后,分别对其进行了实现。并以这两个函数为基础编写了一个任意进制的相互转换器。过程可分为两个步骤,先将任意进制的字符串转利用atoi函数换成10进制数,再将10进数输通过itoa转成对应进制的整形进行输出。
c源代码
#include<stdio.h>#include<stdlib.h>#include<string.h>//整形转字符,radix为输出进制类型,str来存储输出字符串,value为输入10进制数,并返回字符串头指针char* myitoa(int value,char *str,int radix){ int stack[100] = {0},top=0; char *head = str; while(value!=0) { stack[++top]=value%radix; value = value/radix; } while(top!=0) { if(radix<10) { *(str++) = stack[top--]+'0'; } else { if(stack[top]>=10) { *(str++) = stack[top--]-10+'a'; } else *(str++) = stack[top--]+'0'; } } *(str) = '\0'; return head;}//指数运算,a为基数,b为幂,用于atoi函数中,其实也可以通过引用math.h头文件中的pow函数int power(int a,int n){ int tmp = a; if(n==0) { return 1; } else { while(n-->1) { tmp = tmp*a; } return tmp; }}#if 1//字符转整形,str用来输入字符串,radix为输入进制类型,将字符转换成10进制返回int myatoi(char *str,int radix){ int l = strlen(str); int sum = 0,tmp = 0,i = 0; for(i = 0;i<l;i++) { if(radix<10) { tmp = *(str+i)-'0'; tmp = power(radix,l-1-i)*tmp; sum = sum + tmp; } else { tmp = *(str+i)-'0'; if(tmp<10&&tmp>=0) { tmp = power(radix,l-1-i)*tmp; sum = sum + tmp; } else { tmp = *(str+i)-'a'+10; tmp = power(radix,l-1-i)*tmp; sum = sum + tmp; } } } return sum;}#endifint main(){//用来测试/* char *str = malloc(20); int result = 0; str = myitoa(127,str,10); result = strlen(str); result = myatoi(str,10); printf("num: %s\n",str); printf("result: %d\n",result);*/ char *str = malloc(20); int radix = 0,tmp = 0; printf("input number string:"); gets(str); //注意gets函数会产生警告,容易发生堆栈溢出,可用fgets或scanf来代替 printf("input original radix:"); scanf("%d",&radix); tmp = myatoi(str,radix); printf("input radix what to exchange:"); scanf("%d",&radix); str = myitoa(tmp,str,radix); printf("result:%s\n",str); return 0;}
运行结果
这里将10进制数1234转换成12进制数,结果为86a,又将12进制数86a转换成10进制数,结果为1234。该程序只要输入需要转换的数据,数据的进制数和需要输出的进制数就可以得到结果。
0 0
- c语言实现进制转换器
- C语言简单进制转换器
- C语言编程:进制转换器
- C++/CLI 进制转换器 源代码
- 寒假用C写了个“万能进制转换器”
- 写一个【栈】模板,并实现“任意进制转换器”
- 使用栈实现一个任意进制转换器
- [tips]进制转换器
- 简易进制转换器
- 用C语言实现进制转换
- C语言实现进制转换
- struts2学习笔记之转换器实现语言切换
- struts2学习笔记之转换器实现语言切换
- 一个Android进制转换器
- 编写一个进制转换器
- day1work1 16进制转换器
- Java编写进制转换器
- C语言简单实现进制互相转换
- OPENCV(C++) 学习时的那些事(二)
- python自动kill掉长时间的S类php进程(centos7.0)
- 【BZOJ 4403】【推公式+Lucas定理】 序列统计
- 51nod1640 【最小生成树】
- php正则日记
- c语言实现进制转换器
- 写一个EF的CodeFirst的Demo
- Tesseract-OCR 训练自己的中文字库
- python 快速获取图片大小
- 贪心POJ3253
- nginx permission denied
- 51nod1459【二级最短路】
- ajax小结
- java常量池理解