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
Linux下 itoa,atoi 函数的实现相关推荐
- linux父进程中显示子进程pid,请教linux下c语言函数fork父进程打印子进程的PID
请教linux下c语言函数fork父进程打印子进程的PID 关注:296 答案:2 信息版本:手机版 解决时间 2019-01-14 04:55 雨不眠的下 2019-01-13 12:23 用于 ...
- [转帖]关于Linux下的icotl函数
关于Linux下的icotl函数 最近接触android开发,因为有时间所以就关注了下android的源码,在跟踪源码过程中到最后都会遇到icotl函数,虽然在Symbian中曾经遇到过RSocket ...
- sleep头文件linux,Linux下的sleep函数 要用的话得包涵什么头文件啊?
Linux下的sleep函数 要用的话得需要#include sleep把进程的运行状态改为睡眠,将其从系统可执行队列去掉,这样系统就不会调度到该进程,不会分配CPU时间片,同时根据该进程的睡眠时间, ...
- Linux下的延时函数
Linux下的延时函数 1.sleep函数 头文件:#include<unistd.h> 功能:执行挂起操作一段时间,以秒为单位 一般形式:unsigned sleep(unsigned ...
- linux getline参数,Linux下的getline函数
最近在做国嵌的mp3项目,在mp3主控程序中用到了这个函数,挺好使的,在这里记录一下.注意是linux下的,不是C++中的. 函数原型 ssize_t getline(char **lineptr, ...
- Linux下的memcpy函数
之前写过一篇关于 memcpy函数面试的文章 几个简单的笔试题 里面的代码使用的是char指针来实现,今天我们来看看Linux下面的memcpy 函数,它的实现上还是有一些巧妙的. void * me ...
- Linux下通过gettimeofday函数获取程序段执行时间
在Linux下计算某个程序段执行的时间一般使用gettimeofday函数,此函数的声明在sys/time.h文件中.此函数接收两个结构体参数,分别为timeval.timezone. ...
- linux 下的gettimeofday 函数在windows上的替换方案
方案一: #include <time.h> #ifdef WIN32 # include <windows.h> #else # include <sys/ti ...
- 进程间通信管道进阶篇:linux下dup/dup2函数的用法
由于利用管道实现进程间通信,是通过创建两个文件描述符,但是描述符的初始化是通过随机的,就是从可用的文件描述符中取出,并将可用的文件描述符与file对象相关联,如果我们需要将管道的两头与其他的流相关时, ...
最新文章
- 【数据结构】图解霍夫曼编码,看了就能懂
- 一个古帝国做产品的故事
- springmvc中@RequestMapping的使用
- 蓝桥杯 出现次数最多的整数
- 信贷违约风险评估模型(上篇):探索性数据分析
- 程序员算法之找出链表的第K个结点
- 高德地图设置中国经纬度范围
- 511遇见易语言大漠多线程模块教程(1-12课)
- C语言实训设计——疫情健康打卡系统
- 调戏微软文言文AI翻译:“永不舍汝”、“其母之”是什么鬼???
- javawebJAVAJSP网吧管理系统(JSP网吧计费管理系统)网吧收费管理系统网吧自动计费管
- 利用DISC工具进行自我情绪觉察与调试
- linux 性能测试 跑分,测试10秒钟,分析8小时,性能评估只看跑分可不够
- Vue项目实战:订单列表页面实现
- vue-lunar-full-calendar日程控件加农历、24节气和中国节假日的功能
- 还在找各种便签软件?Windows10自带的便签足矣
- HTML入门笔记12-HTML中备注写法
- JS childNodes
- Vi(Vim)快捷键
- docker实现替换镜像
热门文章
- Efficient Text-based Reinforcement Learning by Jointly LeveragingState and Commonsense Graph Repres
- 检验样本是否服从正态分布,处理偏态分布
- Arduino使用高感度声音模块
- 前端js代码循环在页面中输出星星(很早之前代码以此记录-画星星)
- 从算子角度理解优化方法
- 美白,磨皮,搞笑图片处理
- P1607 [USACO09FEB]Fair Shuttle G
- 基于AX7020的petalinux生成并驱动液晶屏(071)
- Java 实现图书馆管理系统
- 【计算机视觉】方向梯度直方图(Histogram of Oriented Gradient,HOG)