在了解了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. 企业级应用能帮助闪存走出产能过剩时代吗?
  2. Android学习笔记--WIFI的操作
  3. C#——LINQ技术DEMO
  4. jquery vilidate 使用小例
  5. Java ListResourceBundle getKeys()方法与示例
  6. xaml 的 intellisense失效的解决办法
  7. Javascript Asynchonous Progamming
  8. js 获取子节点个数
  9. java m e 获取公钥_Java如何生成公钥和私钥?
  10. python 判断某个字符是否为中文
  11. 关于TOGAF认证考试
  12. centos 雷凌凌ralink无线网卡驱动 安装
  13. 三因子两水平doe_温故而知新 | DOE实验设计学习系列之(三):多因子DOE的魅力 (附视频)...
  14. 大家知道老中医化妆品祛痘效果怎么样吗?
  15. APK瘦身实践之旅——启动篇
  16. LTE Cat-M1 物联网模块直接连接全球蜂窝网络
  17. 初学larval 第二篇(大神绕道哦,针对新手友好的一篇)
  18. 阿里云-个人建网站从0到精通(一)
  19. 帝国时代3手机单机版java_帝国时代3手游单机版
  20. wordpress 网站模板-免费wordpress 网站模板以及插件中心

热门文章

  1. 李书福旗下亿咖通纳斯达克上市:作价38亿美元 路演PPT曝光
  2. Android使用GpuImage给图片、视频、相机添加滤镜
  3. iOS脚本打包和持续集成
  4. 华为存储OceanStor 18500 V3 登录DeviceManager页面默认用户admin的密码忘记解决方法
  5. 期权波动率对合约价值有什么影响
  6. CAD梦想画图中的“颜色设置”
  7. Java节流阀设计与实现
  8. 蘑菇车联推出“AI云+OS+智能终端+传感器”车联网一体化解决方案
  9. cosmos源码分析——staking模块(节点管理)
  10. 锤子手机2014发布会视频