itoa 用法与源码剖析
2016-06-21 16:25
253 查看
一:用法示例
函数原型:char* _itoa(int value, char* string, int radix)
实现功能:按照进制准则,把数字转换字符串
参数:
int value 要转换的数字
char* string 存储字符串
int radix 进制
举例:
Output:
二:源码
三:源码剖析
点击进入目录---->
C++源码剖析目录
函数原型:char* _itoa(int value, char* string, int radix)
实现功能:按照进制准则,把数字转换字符串
参数:
int value 要转换的数字
char* string 存储字符串
int radix 进制
举例:
/* itoa example */ #include <stdio.h> #include <stdlib.h> int main() { int i; char buffer[33]; printf("Enter a number: "); scanf("%d", &i); itoa(i, buffer, 10); printf("decimal: %s\n", buffer); itoa(i, buffer, 16); printf("hexadecimal: %s\n", buffer); itoa(i, buffer, 2); printf("binary: %s\n", buffer); return 0; }
Output:
Enter a number: 1750 decimal: 1750 hexadecimal: 6d6 binary: 11011010110 |
char* _itoa(int value, char* string, int radix) { char tmp[33]; char* tp = tmp; int i; unsigned v; int sign; char* sp; if (radix > 36 || radix <= 1) { __set_errno(EDOM); return 0; } sign = (radix == 10 && value < 0); if (sign) v = -value; else v = (unsigned)value; while (v || tp == tmp) { i = v % radix; v = v / radix; if (i < 10) *tp++ = i + '0'; else *tp++ = i + 'a' - 10; } if (string == 0) string = (char*)malloc((tp - tmp) + sign + 1); sp = string; if (sign) *sp++ = '-'; while (tp > tmp) *sp++ = *--tp; *sp = 0; return string; }
三:源码剖析
char* _itoa(int value, char* string, int radix) { char tmp[33]; char* tp = tmp; int i; unsigned v; int sign; char* sp; if (radix > 36 || radix <= 1) { __set_errno(EDOM); return 0; } /* 编程语言的基础类库一般最大到36,小于2的进制没有意义,如果给定的参数不满足这个范围, 运行时会发出Debug Assertion Failed。对于最小的进制2,一个int,4个字节,32位,tmp 开33的数组足够 */ sign = (radix == 10 && value < 0); if (sign) v = -value; else v = (unsigned)value; /* 这里对radix进行分类,10进制与非10进制,如果是10进制,直根据负数还是正数进行转化就行, 如果不是10进制,根据反码,补码的知识,把value转成unsigned类型 */ while (v || tp == tmp) { i = v % radix; v = v / radix; if (i < 10) *tp++ = i + '0'; else *tp++ = i + 'a' - 10; } /* 转化过程 */ if (string == 0) string = (char*)malloc((tp - tmp) + sign + 1); /* 如果给定的指针不指向有效的内存区,根据所给参数申请足够的内存 */ sp = string; if (sign) *sp++ = '-'; while (tp > tmp) *sp++ = *--tp; *sp = 0; return string; }
点击进入目录---->
C++源码剖析目录
相关文章推荐
- hibernate在使用getCurrentSession时提示no session found for current thread
- 每天一个Linux命令(02)--cd命令
- meta标签整理
- 格子游戏类型实践—2
- [leetcode] 97. Interleaving String
- Activity跳转Flag你想知道的都在这了
- iOS动画学习笔记5 Video Tutorial iOS Animation with Swift - Ray Wenderlich
- JSTL的重点
- 把多个JavaScript函数帮顶到一个onload事件处理函数上
- 把多个JavaScript函数帮顶到一个onload事件处理函数上
- 把多个JavaScript函数帮顶到一个onload事件处理函数上
- 把多个JavaScript函数帮顶到一个onload事件处理函数上
- 把多个JavaScript函数帮顶到一个onload事件处理函数上
- 把多个JavaScript函数帮顶到一个onload事件处理函数上
- 把多个JavaScript函数帮顶到一个onload事件处理函数上
- 把多个JavaScript函数帮顶到一个onload事件处理函数上
- 把多个JavaScript函数帮顶到一个onload事件处理函数上
- 把多个JavaScript函数帮顶到一个onload事件处理函数上
- 把多个JavaScript函数帮顶到一个onload事件处理函数上
- 把多个JavaScript函数帮顶到一个onload事件处理函数上