在了解了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语言实现进制转换器相关推荐

  1. 简单的C语言任意进制转换器

    简单的C语言任意进制转换器 该进制转换器可进行任意进制转换,请看效果图: 代码 /** ******函数声明******进制函数,输入与输出 void main();******返回将n进制num转换 ...

  2. C语言简单进制转换器

    支持任意进制转换 #include #include #define MAXSIZE 100 typedef int datacontent; /*定义栈*/ typedef struct{ data ...

  3. C语言编程>第二十八周 ① 多功能进制转换器设计

    多功能进制转换器设计 这两天花时间用C语言编写了一个多功能进制转换器,可以实现十进制数到二进制数的转换.十进制数到八进制数的转换.十进制数到十六进制数的转换.二进制数到八进制数的转换.二进制数到十进制 ...

  4. 进制转换器——章节实验作业(C语言链栈)

    进制转换器--章节实验作业 [问题描述]十进制数N和其他d进制数的转换是计算机实现计算的基本问题.通常我们可以使用短除法进行转换,基本原理为:N=(N div d)*d+N mod d(其中:div为 ...

  5. 进制转换器的c代码实现

    1.很久没有更新博客了 这次想要记录分享一下在这段学习过程中实现的进制转换器 c语言代码 里面运用到了一些数据结构和递归的相关知识 也算是一个简单的综合运用吧 2.核心思想是将一切进制转换为10进制 ...

  6. 万能进制转换器——栈应用

    万能进制转换器--栈应用 前言 一.设计思路 1.字符串和数字通过ASCII码来转换 2.先将用户输入的数字转换为10进制,再由10进制转为其他进制 二.具体步骤的实现 1.准备步骤 1.执行步骤 ( ...

  7. 16进制输出C语言字符常量,基础C语言:进制、常量

    基础C语言:进制.常量一.进制 1.什么叫进制 进制就是逢几进一,我们说N进制实际就是指逢N进一 (例,计算机只识别二进制:人类习惯使用的是十进制:为了实际需要又建立了八进制和十六进制) 2.不同进制 ...

  8. c语言中10转8和16的转换,(C语言)10进制转换2,8,16进制

    (C语言)10进制转换2,8,16进制 作者:vinseven #include"stdio.h" #include"conio.h" #include&quo ...

  9. 用java编写进制转换器_JAVA 简单进制转换器

    JAVA作业写了个进制转换器...写出来的东西还蛮怪的 /* * Author:graykido * Coding:GBK * */ package Caculater; import javafx. ...

最新文章

  1. Flutter之Widget、Element、renderObject
  2. XTU 1243 2016
  3. PyTorch教程(一):张量数据类型
  4. 如何轻松记忆Linux文件系统层次结构
  5. 【福利赠书】命题专家点评中国研究生数学建模之现状
  6. Harris角点检测和Shi-Tomasi角点检测
  7. NLP学习难在哪里?这份最全NLP学习路线图帮你解决难题!
  8. 日常英语:最近的药店在哪里
  9. java网上零食销售网站系统
  10. 无标度网络的C++代码实现
  11. 单层感知器->BP算法详细推导
  12. 【2021】【论文笔记】红外及THz下的细胞膜生物效应——效应是现象,作用是机理——THz对医学的好处
  13. 如果矩阵中存在字符用C语言,面试中常见的数据结构与算法题整理,想当架构师,数据结构与算法不过关可不行(数组+字符串,共60题)...
  14. css backdrop-filter属性 用来做图片的部分模糊效果
  15. VisualNet地税管道综合资源管理系统
  16. C语言散列法求英文字母字符串求余,c语言求余数
  17. 95后程序员月薪2万背着电脑送外卖,送单途中帮人修复bug
  18. 删除Word文档空白页的方法,日常必备!
  19. 如何判断轨道上行下行
  20. 吃烧烤之命令模式学习笔记[C++版]

热门文章

  1. 【计算机网络】HTTP协议知识点总结
  2. 响应式布局的原理和实现方法
  3. YOLOv5在无人机/遥感场景下做旋转目标检测时进行的适应性改建详解(踩坑记录)...
  4. 2021 春运购票日程 抢购建议
  5. MSP和CMP定义入门
  6. OCR识别-实际应用案例
  7. EMQX +阿里云计算巢,一站式构建云上物联网平台
  8. 数据结构-顺序表结构的实现C语言(全代码)
  9. 中文自然语言处理,繁体转简体(下载langconv)
  10. 18种简单的水平线样式