c语言实现进制转换器
在了解了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。该程序只要输入需要转换的数据,数据的进制数和需要输出的进制数就可以得到结果。
c语言实现进制转换器相关推荐
- 简单的C语言任意进制转换器
简单的C语言任意进制转换器 该进制转换器可进行任意进制转换,请看效果图: 代码 /** ******函数声明******进制函数,输入与输出 void main();******返回将n进制num转换 ...
- C语言简单进制转换器
支持任意进制转换 #include #include #define MAXSIZE 100 typedef int datacontent; /*定义栈*/ typedef struct{ data ...
- C语言编程>第二十八周 ① 多功能进制转换器设计
多功能进制转换器设计 这两天花时间用C语言编写了一个多功能进制转换器,可以实现十进制数到二进制数的转换.十进制数到八进制数的转换.十进制数到十六进制数的转换.二进制数到八进制数的转换.二进制数到十进制 ...
- 进制转换器——章节实验作业(C语言链栈)
进制转换器--章节实验作业 [问题描述]十进制数N和其他d进制数的转换是计算机实现计算的基本问题.通常我们可以使用短除法进行转换,基本原理为:N=(N div d)*d+N mod d(其中:div为 ...
- 进制转换器的c代码实现
1.很久没有更新博客了 这次想要记录分享一下在这段学习过程中实现的进制转换器 c语言代码 里面运用到了一些数据结构和递归的相关知识 也算是一个简单的综合运用吧 2.核心思想是将一切进制转换为10进制 ...
- 万能进制转换器——栈应用
万能进制转换器--栈应用 前言 一.设计思路 1.字符串和数字通过ASCII码来转换 2.先将用户输入的数字转换为10进制,再由10进制转为其他进制 二.具体步骤的实现 1.准备步骤 1.执行步骤 ( ...
- 16进制输出C语言字符常量,基础C语言:进制、常量
基础C语言:进制.常量一.进制 1.什么叫进制 进制就是逢几进一,我们说N进制实际就是指逢N进一 (例,计算机只识别二进制:人类习惯使用的是十进制:为了实际需要又建立了八进制和十六进制) 2.不同进制 ...
- c语言中10转8和16的转换,(C语言)10进制转换2,8,16进制
(C语言)10进制转换2,8,16进制 作者:vinseven #include"stdio.h" #include"conio.h" #include&quo ...
- 用java编写进制转换器_JAVA 简单进制转换器
JAVA作业写了个进制转换器...写出来的东西还蛮怪的 /* * Author:graykido * Coding:GBK * */ package Caculater; import javafx. ...
最新文章
- Flutter之Widget、Element、renderObject
- XTU 1243 2016
- PyTorch教程(一):张量数据类型
- 如何轻松记忆Linux文件系统层次结构
- 【福利赠书】命题专家点评中国研究生数学建模之现状
- Harris角点检测和Shi-Tomasi角点检测
- NLP学习难在哪里?这份最全NLP学习路线图帮你解决难题!
- 日常英语:最近的药店在哪里
- java网上零食销售网站系统
- 无标度网络的C++代码实现
- 单层感知器->BP算法详细推导
- 【2021】【论文笔记】红外及THz下的细胞膜生物效应——效应是现象,作用是机理——THz对医学的好处
- 如果矩阵中存在字符用C语言,面试中常见的数据结构与算法题整理,想当架构师,数据结构与算法不过关可不行(数组+字符串,共60题)...
- css backdrop-filter属性 用来做图片的部分模糊效果
- VisualNet地税管道综合资源管理系统
- C语言散列法求英文字母字符串求余,c语言求余数
- 95后程序员月薪2万背着电脑送外卖,送单途中帮人修复bug
- 删除Word文档空白页的方法,日常必备!
- 如何判断轨道上行下行
- 吃烧烤之命令模式学习笔记[C++版]