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

Linux下 itoa,atoi 函数的实现相关推荐

  1. linux父进程中显示子进程pid,请教linux下c语言函数fork父进程打印子进程的PID

    请教linux下c语言函数fork父进程打印子进程的PID 关注:296  答案:2  信息版本:手机版 解决时间 2019-01-14 04:55 雨不眠的下 2019-01-13 12:23 用于 ...

  2. [转帖]关于Linux下的icotl函数

    关于Linux下的icotl函数 最近接触android开发,因为有时间所以就关注了下android的源码,在跟踪源码过程中到最后都会遇到icotl函数,虽然在Symbian中曾经遇到过RSocket ...

  3. sleep头文件linux,Linux下的sleep函数 要用的话得包涵什么头文件啊?

    Linux下的sleep函数 要用的话得需要#include sleep把进程的运行状态改为睡眠,将其从系统可执行队列去掉,这样系统就不会调度到该进程,不会分配CPU时间片,同时根据该进程的睡眠时间, ...

  4. Linux下的延时函数

    Linux下的延时函数 1.sleep函数 头文件:#include<unistd.h> 功能:执行挂起操作一段时间,以秒为单位 一般形式:unsigned sleep(unsigned ...

  5. linux getline参数,Linux下的getline函数

    最近在做国嵌的mp3项目,在mp3主控程序中用到了这个函数,挺好使的,在这里记录一下.注意是linux下的,不是C++中的. 函数原型 ssize_t getline(char **lineptr, ...

  6. Linux下的memcpy函数

    之前写过一篇关于 memcpy函数面试的文章 几个简单的笔试题 里面的代码使用的是char指针来实现,今天我们来看看Linux下面的memcpy 函数,它的实现上还是有一些巧妙的. void * me ...

  7. Linux下通过gettimeofday函数获取程序段执行时间

    在Linux下计算某个程序段执行的时间一般使用gettimeofday函数,此函数的声明在sys/time.h文件中.此函数接收两个结构体参数,分别为timeval.timezone.         ...

  8. linux 下的gettimeofday 函数在windows上的替换方案

    方案一: #include <time.h> #ifdef WIN32 #   include <windows.h> #else #   include <sys/ti ...

  9. 进程间通信管道进阶篇:linux下dup/dup2函数的用法

    由于利用管道实现进程间通信,是通过创建两个文件描述符,但是描述符的初始化是通过随机的,就是从可用的文件描述符中取出,并将可用的文件描述符与file对象相关联,如果我们需要将管道的两头与其他的流相关时, ...

最新文章

  1. 【数据结构】图解霍夫曼编码,看了就能懂
  2. 一个古帝国做产品的故事
  3. springmvc中@RequestMapping的使用
  4. 蓝桥杯 出现次数最多的整数
  5. 信贷违约风险评估模型(上篇):探索性数据分析
  6. 程序员算法之找出链表的第K个结点
  7. 高德地图设置中国经纬度范围
  8. 511遇见易语言大漠多线程模块教程(1-12课)
  9. C语言实训设计——疫情健康打卡系统
  10. 调戏微软文言文AI翻译:“永不舍汝”、“其母之”是什么鬼???
  11. javawebJAVAJSP网吧管理系统(JSP网吧计费管理系统)网吧收费管理系统网吧自动计费管
  12. 利用DISC工具进行自我情绪觉察与调试
  13. linux 性能测试 跑分,测试10秒钟,分析8小时,性能评估只看跑分可不够
  14. Vue项目实战:订单列表页面实现
  15. vue-lunar-full-calendar日程控件加农历、24节气和中国节假日的功能
  16. 还在找各种便签软件?Windows10自带的便签足矣
  17. HTML入门笔记12-HTML中备注写法
  18. JS childNodes
  19. Vi(Vim)快捷键
  20. docker实现替换镜像

热门文章

  1. Efficient Text-based Reinforcement Learning by Jointly LeveragingState and Commonsense Graph Repres
  2. 检验样本是否服从正态分布,处理偏态分布
  3. Arduino使用高感度声音模块
  4. 前端js代码循环在页面中输出星星(很早之前代码以此记录-画星星)
  5. 从算子角度理解优化方法
  6. 美白,磨皮,搞笑图片处理
  7. P1607 [USACO09FEB]Fair Shuttle G
  8. 基于AX7020的petalinux生成并驱动液晶屏(071)
  9. Java 实现图书馆管理系统
  10. 【计算机视觉】方向梯度直方图(Histogram of Oriented Gradient,HOG)