当前位置: 首页 > article >正文

Linux下 itoa,atoi 函数的实现

        atoi和itoa是C中两个常见的函数,功能是进行字符和数字来回转换,原型如下:

int atoi(const char *nptr); //nptr是要转换的字符串,返回转换后的整数。

char *itoa( int value, char *string, int radix); //value是要转换的整数,string是接受的转换后字符串,返回的也是这个, radix是几进制,如2,10分别表示二进制,10进制。

itoa函数的头文件是stdio.h, 它并不是一个标准的C函数,而是Windows特有的,如果在linux系统使用itoa函数,编译会通不过。两种方式可替代:

1, sprintf函数

int main()
{int n=233;char s[32]={0};sprintf(s,"%d",n);printf("sprintf, int2str, s= %s\n",s);
}

2,自写实现

下面分别给了使用stdio.h库的atoi, itoa函数调用方式,以及自写的c++实现方式。

#include<iostream>using namespace std;int str2int(const char *str){int temp = 0;const char *ptr = str;  //ptr保存str字符串开头if (*str == '-' || *str == '+')  //如果第一个字符是正负号,{                      //则移到下一个字符str++;}while(*str != 0){if ((*str < '0') || (*str > '9'))  //如果当前字符不是数字{                       //则退出循环break;}temp = temp * 10 + (*str - '0'); //如果当前字符是数字则计算数值str++;      //移到下一个字符}  if (*ptr == '-')     //如果字符串是以“-”开头,则转换成其相反数{temp = -temp;}return temp;}void int2str(int n, char *str){char buf[10] = "";int i = 0;int len = 0;int temp = n < 0 ? -n: n;  // temp为n的绝对值if (str == NULL){return;}while(temp){buf[i++] = (temp % 10) + '0';  //把temp的每一位上的数存入buftemp = temp / 10;}len = n < 0 ? ++i: i;  //如果n是负数,则多需要一位来存储负号str[i] = 0;            //末尾是结束符0while(1){i--;if (buf[len-i-1] ==0){break;}str[i] = buf[len-i-1];  //把buf数组里的字符拷到字符串}if (i == 0 ){str[i] = '-';          //如果是负数,添加一个负号}}int ll2str(char *s, long long value,int radix) {char *p, aux;unsigned long long v;size_t l;/* Generate the string representation, this method produces* an reversed string. */v = (value < 0) ? -value : value;p = s;do {*p++ = '0' + (v % radix); // 2 v /= radix; // 2} while (v);if (value < 0) *p++ = '-';/* Compute length and add null term. */l = p - s;*p = '\0';/* Reverse the string. */p--;while (s < p) {aux = *s;*s = *p;*p = aux;s++;p--;}return l;
}int main()
{int n=233;char s[32]={0};sprintf(s,"%d",n);printf("sprintf, int2str, s= %s\n",s);ll2str(s, n, 10); //转换为给定几进制的字符串 printf("ll2str, s= %s\n",s);char s1[32]={0};int2str(n,s1);printf("c++, int2str, s1= %s\n",s1);int n1=str2int(s);printf("c++, str2int, n1= %d\n",n1);char s2[32]={0};itoa(n1,s2,10);printf("c, int2str, s2= %s\n",s2);int n2=atoi(s2);printf("c, str2int, n2= %d\n",n2);}

参考:

atoi 和 itoa的实现 - CobbLiu - 博客园

linux 下实现 itoa 转二进制_wenfh2020的博客-CSDN博客_itoa linux

http://www.lryc.cn/news/2414527.html

相关文章:

  • 三维重建(7)--运动恢复结构SfM系统解析
  • 无线渗透----扫描附近WiFi(windows系统)
  • location.href用法总结(转)
  • vue3如何实现使用SortableJs插件进行表格内的数据项拖拽排序
  • 深度学习之目标检测(九)--YOLOv3 SPP理论介绍
  • JenKins 自动化打包上传到服务器的fir 工具
  • CSS基础:插入CSS样式的3种方法
  • 7.1 函数的基本概念和定义
  • linux 环境变量设置(临时 + 永久)
  • BootStrapTable 分页
  • Class.forName()用法详解
  • HTB靶场 Perfection
  • 什么是JNDI
  • After Effect切换中英文教程
  • 十大排序算法:快速排序算法
  • Java实现大文件断点续传技术
  • JavaWeb笔记之SSH(Struts2框架)
  • java drawimage 本地,java drawimage()方法
  • 均衡器equalizer
  • Ubuntu系统安装.deb文件操作
  • java 货架高度摆放最优算法_【计算机系统应用】(第九十五期)面向堆垛机路径优化的局部搜索自适应遗传算法...
  • web前端:从index.html开始
  • 模拟实现web版微信
  • dom4j简介(转)
  • Mysql - Redo 和 Undo日志
  • 码率(kbps)、帧率(FPS)、分辨率和清晰度的正反比关系
  • 用通俗易懂的方式讲解:决策树模型及案例(Python 代码)
  • 探索GTK和Rust的魅力:一个高效、跨平台的GUI开发神器
  • 群的拉格朗日定理的应用:欧拉定理的两种证明方法+RSA加密算法
  • OrCAD(一)简介、安装与基本使用