目录

一、参数

二、函数说明

三、返回值

四、可移植性(Portability)

五、示例

六、模拟实现



函数原型:

char* itoa(int value, char* str, int base);

itoa 即 integer to array

所属头文件stdlib.h

一、参数

  1. value:要转换为字符串的整数。

  2. str:内存中的数组,用于存储生成的以 \0 结尾的字符串。

  3. base:基数,必须在 2 ~ 36 范围内,其中 10 表示十进制,16 表示十六进制,8 表示八进制,2 表示二进制。

    base or raidx:a number on which a system of counting and expressing numbers is built up, for example 10 in the decimal system and 2 in the binary system.

    0 ~ 9、a ~ z

二、函数说明

将整数转换为字符串(Convert integer to string)

  • If base is 10 and value is negative, the resulting string is preceded with a minus sign (-). With any other base, value is always considered unsigned.

    如果基数为 10 并且数字为负,则生成的字符串前面带有减号。对于其他任何基数,value 始终视为无符号

  • str should be an array long enough to contain any possible value: (sizeof(int) * 8 + 1) for radix = 2, i.e. 17 bytes in 16-bits platforms and 33 in 32-bits platforms.

    i.e. 词源是拉丁语 id est,英文含义为 that is/ in other word(即/ 换而言之)

    str 应该是一个足够长的数组,以包含任何可能的值:对于基数 2,应该是 (sizeof(int) * 8 + 1),即 16 位平台中应该是 17 字节,32 位平台中应该是 33 字节

三、返回值

指向生成的以 \0 结尾的字符串的指针,与参数 str 相同

四、可移植性(Portability)

这个函数未在 ANSI-C 中定义,也不是 C++ 的一部分,但某些编译器支持此函数

在某些情况下,符合标准的(standard-compliant)替代方案可能是 sprintf

  • sprintf(str, "%d", value);

    将十进制整数转换为字符串

  • sprintf(str, "%x", value);

    将十六进制整数转换为字符串

  • sprintf(str, "%o", value);

    将八进制整数转换为字符串

五、示例

#include <stdio.h>
#include <stdlib.h>int main()
{char buf[33];int num = 0;printf("Enter a number:");  // 28scanf("%d", &num);printf("decimal:%s\n", _itoa(num, buf, 10));  // 28printf("binary:%s\n", _itoa(num, buf, 2));  // 11100printf("octal:%s\n", _itoa(num, buf, 8));  // 34printf("hexadecimal:%s\n", _itoa(num, buf, 16));  // 1csprintf(buf, "%d", num);printf("decimal:%s\n", buf);  // 28sprintf(buf, "%o", num);printf("octal:%s\n", buf);  // 34sprintf(buf, "%x", num);printf("hexadecimal:%s\n", buf);  // 1creturn 0;
}

六、模拟实现

char* my_itoa(int value, char* str, int base)
{if (base < 2 || base > 32){printf("Wrong radix!\n");return str;}char* ret = str;if (value == 0){*str++ = '0';*str = '\0';return ret;}if (base == 10 && value < 0){value = -value;*str++ = '-';}char* start = str;// 从右到左依次将数字的每一位存储起来size_t num = value;while (num != 0){if (num % base < 10){*str++ = '0' + (char)(num % base);}else{*str++ = 'a' + (char)(num % base - 10);}num /= base;}*str = '\0';// 倒置字符串for (char* left = start, *right = str - 1; left < right; left++, right--){char tmp = *left;*left = *right;*right = tmp;}return ret;
}

详解 itoa 函数并模拟实现相关推荐

  1. 详解 atoi 函数并模拟实现

    目录 一.函数说明 二.返回值 三.模拟实现 函数原型: int atoi(const char* str); 所属头文件:stdlib.h 一.函数说明 将字符串转换为整数(Convert stri ...

  2. 详解虚函数的实现过程之单继承(2)

    从汇编分析一下下面的多态模拟结构 利用 父类指针指向子类的特性,可以间接调用各子类中的虚函数. 虽然指针类型为父类,但由于虚表的排列顺序是按虚函数在类继承层次中首次声明的顺序依次排列的,因此,只要继承 ...

  3. 一分钟详解initUndistortRectifyMap函数bug修复方法

    本文首发于微信公众号「3D视觉工坊」--一分钟详解initUndistortRectifyMap函数bug修复方法 在上一篇文章OpenCV中initUndistortRectifyMap函数存在bu ...

  4. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  5. 《信息系统项目管理师软考辅导——3年真题详解与全真模拟》主要创新点、关注点...

    <信息系统项目管理师软考辅导--3年真题详解与全真模拟>主要创新点.关注点 新增2014年5月.11月两份真题试卷的360°透彻解析: 更新2013年5月.11月真题试卷的解析: 紧扣考纲 ...

  6. 详解虚函数的实现过程之菱形继承(5)

    大家看到标题,会不会菱形继承的虚表会不会是重复的呢?祖父类的虚表会不会在子类会不会是两份相同呢?那么我们一起来探索一下吧,冲冲冲!! 首先我们来分析一下: 它一共定义了四个类,分别为CFurnitur ...

  7. 详解虚函数的实现过程之虚基类(4)

    博客虚函数实现过程3 时提到过虚基类,这里呢,我们来详细讲述一下: 当我们在虚函数的声明结尾处添加"=0",这种虚函数就被称为纯虚函数. 它好似一个没有实现只有声明的函数,它的存在 ...

  8. 详解虚函数的实现过程之多重继承(3)

    下面来一起探索一下多重继承时,有虚函数会怎么继承呢? 这里大家猜一下,SofaBed会占多少个字节呢? 首先我们是不是得猜一下它有几个虚表指针? 4* 4(4个int数据)+2*4(两个虚表指针)=2 ...

  9. 详解虚函数的实现过程之初探虚表(1)

    空对象它有一字节的大小,在没有任何成员变量但是却有虚函数的对象里,它的大小是四个字节,这是为什么呢? 因为含有虚函数的对象里,对象的起始地址往后四个字节其实是 一个指针,它指向了一个数组,这个数组的元 ...

最新文章

  1. 【BZOJ-2668】交换棋子 最小费用最大流
  2. 在Sqlserver下巧用行列转换日期的数据统计
  3. BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
  4. sublime text实现函数跳转(window环境)
  5. LogMiner学习笔记
  6. 7-69 字母图形 (15 分)
  7. GCD API 理解 (一)
  8. var和function谁先优先执行_浅谈JavaScript 的执行顺序
  9. 艾宾浩斯曲线在线 PDF 文件生成 在线背单词 背单词计划表 高考-四级-六级-SAT-托福-雅思-GRE-17 天搞定 GRE 单词, 背单词神器-动态生成时间表! 利用艾宾浩斯记忆曲线自动生成背单
  10. Revit二次开发-设置视图范围无限制
  11. 服务器共享文件设成禁止删除,服务器共享文件夹权限 禁止删除共享文件方法...
  12. Team Tic Tac Toe--数据结构set的妙用
  13. 发展你的GDS的应用技术
  14. Android Service之bindService
  15. PR字幕预设|视频文字闪烁标题闪动特效PR预设
  16. 「PAT乙级真题解析」Basic Level 1053 住房空置率 (问题分析+完整步骤+伪代码描述+提交通过代码)
  17. 云闪付怎么对接三方php,第三方支付-银联云闪付开发教程
  18. DotNetTextBox V3.0 所见即所得编辑器控件Ver3.2.7 Free(免费版)
  19. GBase 8a集群目录结构
  20. 罗马音平假名中文可复制_西方音乐史---古希腊、古罗马笔记

热门文章

  1. 6.1 ASP.NET Core Web 入门
  2. Laravel 安装多国语言包后,phpstorm 还是报错
  3. VMware 创建 启动指定虚拟机 的 快捷方式
  4. 安卓 LayoutInflater详解
  5. 关于打的 umd 包在使用时,报 require is not defined 错误的问题出处
  6. 【汇编综合应用】大小写字母的转换、2号、9号和10号DOS系统功能调用、分支、循环程序结构、子程序、寄存器传递参数,宏定义、宏调用,观察宏展开。
  7. 士兵职业基本适应性测试软件,征兵体检中最后一项“士兵职业基本适应性检测”是什么意思?...
  8. python global 变量_python中global变量释疑
  9. chk文件恢复和文件恢复的区别有哪些?
  10. 关于幂级数求导/积分后幂级数收敛域变化的问题