itoa的源代码实现
由于通过socket传递数据的时候,仅仅能够通过字符串类型,可是,当我们要传递的数据是整型的是,应该怎么办呢?本来我想着使用for循环,可是,总感觉太麻烦了,后来别人告诉我能够使用itoa,以下是itoa的原型:
char *itoa(int value, char *string, int radix);
举比例如以下:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char arr[10];
int a=123456;
itoa(a,arr,10);
cout<<arr<<endl;
cout<<strlen(arr)<<endl;
return 0;
}
可是,正在高兴的时候,才发如今Unix下没有itoa函数,上网上一搜,才发现itoa不是标准的C语言函数,以下是百度百科中的解释:
itoa是广泛应用的非标准C语言扩展函数。因为它不是标准C语言函数,所以不能在全部的编译器中使用。可是,大多数的编译器(如Windows上的)通常在<stdlib.h>头文件里包括这个函数。在<stdlib.h>中与之有相反功能的函数是atoi。
那应该怎么办呢?
后来同事告诉我,能够使用万能的sprintf啊,我恍然大悟,以下举一个小样例:
#include <iostream>
using namespace std;
int main()
{
char arr[10];
int a=123;
sprintf(arr,"%d",a);
cout<<arr<<endl;
}
我当时挺想知道itoa内部究竟是怎么实现的,在网上搜了一个样例,感觉写的的挺不错的,我把这个实现itoa的源代码的文件改动了一下,能够执行了,以下是源代码:
#include <stdlib.h>
#include <stdio.h>
char *myitoa(int num,char *str,int radix);
int main()
{
int number = -123456;
char string[25];
myitoa(number, string, 16);
printf("integer = %d string = %s\n", number, string);
return 0;
}
/* 实现itoa函数的源码 */
char *myitoa(int num,char *str,int radix)
{
/* 索引表 */
char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
unsigned unum; /* 中间变量 */
int i=0,j,k;
/* 确定unum的值 */
if(radix==10&&num<0) /* 十进制负数 */
{
unum=(unsigned)-num;
str[i++]='-';
}
else unum=(unsigned)num; /* 其它情况 */
/* 逆序 */
do
{
str[i++]=index[unum%(unsigned)radix];
unum/=radix;
}while(unum);
str[i]='\0';
/* 转换 */
if(str[0]=='-') k=1; /* 十进制负数 */
else k=0;
/* 将原来的“/2”改为“/2.0”,保证当num在16~255之间,radix等于16时,也能得到正确结果 */
char temp;
for(j=k;j<=(i-k-1)/2.0;j++)
{
temp=str[j];
str[j]=str[i-j-1];
str[i-j-1]=temp;
}
return str;
}
扩展阅读: http://baike.baidu.com/view/982195.htm
我在网上搜memcpy的时候,网上有一句话“memcpy能够复制随意内容,比如字符数组、整型、结构体、类等”,所以我想着使用memcpy应该也能够实现上面这个问题,希望看过这篇文章的不吝赐教一下,谢谢!
itoa的源代码实现的更多相关文章
- 转:RTMPDump源代码分析
0: 主要函数调用分析 rtmpdump 是一个用来处理 RTMP 流媒体的开源工具包,支持 rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://. ...
- itoa()、atoi()、任意进制转换
头文件:<stdlib.h> itoa --功能:将任意类型的数字转换为字符串.在<stdlib.h>中与之有相反功能的函数是atoi. atoi----功 能: 将字符串转换 ...
- 面试必会函数源代码 strcpy/memcpy/atoi/kmp/quicksort
http://blog.csdn.net/liuqiyao_01/article/details/26967813 二.stl模板函数 1.strcpy char * strcpy( char *st ...
- kube-proxy源代码分析
摘要:假设你对kube-proxy的工作原理有一定的了解.本文基于kubernetes v1.5代码对kube-proxy的源代码文件夹结构进行了分析,并以iptables mode为例进行了完整流程 ...
- arcgis api for js入门开发系列八聚合效果(含源代码)
上一篇实现了demo的图层控制模块,本篇新增聚合效果,截图如下(源代码见文章底部): 聚合效果实现的思路如下: 1.map.html引用聚合包,项目已经包含进来了的聚合文件夹: <script ...
- arcgis api for js入门开发系列七图层控制(含源代码)
上一篇实现了demo的地图分屏对比模块,本篇新增图层控制模块,截图如下(源代码见文章底部): 图层控制模块实现的思路如下: 1.在地图配置文件map.config.js里面配置图层目录树节点信息,作为 ...
- arcgis api for js入门开发系列六地图分屏对比(含源代码)
上一篇实现了demo的地图标绘模块,本篇新增地图地图分屏对比模块,截图如下(源代码见文章底部): 对效果图的简单介绍一下,在demo只采用了两分屏对比,感兴趣的话,可以在两分屏的基础上拓展,修改css ...
- arcgis api for js入门开发系列五地图态势标绘(含源代码)
上一篇实现了demo的地图查询功能,本篇新增地图态势标绘模块,截图如下: 本篇核心的在于调用API的Draw工具:https://developers.arcgis.com/javascript/3/ ...
- arcgis api for js入门开发系列四地图查询(含源代码)
备注:由于实现本篇功能的需求,修改了地图数据的dlsearch.mxd,然后更新了地图服务,需要的在文章最后有提供最新的mxd以及源代码下载的 上一篇实现了demo的地图工具栏,本篇新增地图查询功能, ...
随机推荐
- [ES6] Module export
Default export: Default export is easy way to export a function to outside module. //flash-message.j ...
- uva 10560 - Minimum Weight(数论)
题目连接:uva 10560 - Minimum Weight 题目大意:给出n,问说至少须要多少个不同重量的砝码才干称量1~n德重量,给出所选的砝码重量,而且给出k,表示有k个重量须要用上述所选的砝 ...
- jQuery的简单应用
时隔多日, 终于我又有时间来浏览些新知识了, 并不是偷懒什么的, 只是真的好忙, 看似闲暇的时间总是冒出一些模糊而又不得不做的事情, 今日终于我又有时间了, 可以看下jQuery了, 并根据自己的了 ...
- DownloadManager 下载管理类
演示 简介 从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到.下载管理类可以长期处理多个HTTP下载任务,客户端 ...
- 代码段编辑器SnippetEditor 2.1
1.选择程序版本 2.可以创建文件夹 3.新建片段 4.给片段取名 5.双击进行编辑 6.点击保存 7.直接使用
- css margin重叠
父子元素margin(垂直方向)重叠 解决办法: 给子元素添加浮动属性,相应父元素添加必要的清浮动属性: 给父元素添加边缘属性,如padding.border: 同级元素margin(垂直方向)反向重 ...
- js 全国城市3级联动
js /* * 全国三级城市联动 js版 */ function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,iArray){ ...
- 新Android学习计划
最近,在学习Android Design Support Library提供的新控件过程中,我感受到了原来的学习方式的缺点: 学习内容过于随意,在工作过程中碰到的新问题都想去掌握,心血来潮就想写一篇相 ...
- Ring对象
Ring是一个封闭的Path即起始和终止点有相同的坐标值,它有内部和外部属性.
- cordova-plugin-app-version插件使用
此插件用来获取开发软件的版本号! 首先安装此插件: 命令行中输入 cordova plugin add cordova-plugin-app-version 然后刷新项目,就会在在项目plugin ...