深入C++实现函数itoa()的分析
C++ 实现 函数 分析 深入 itoa
2023-06-13 09:15:00 时间
函数itoa()是将整数型转换为c语言风格字符串的函数,原型:
char*itoa(intdata,char*p,intnum);
data是传入的带转化的数字,为整型变量(data的最大值为2的31次方减去1),p是传入的字符型指针,指向存储转换后字符串空间的首地址;num指定要转换成几进制的数字字符串(二进制,八进制,十进制,十六进制)。
如有不足之处,还望指正!!!
复制代码代码如下:
data是传入的带转化的数字,为整型变量(data的最大值为2的31次方减去1),p是传入的字符型指针,指向存储转换后字符串空间的首地址;num指定要转换成几进制的数字字符串(二进制,八进制,十进制,十六进制)。
如有不足之处,还望指正!!!
//TestInheritance.cpp:定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<iostream>
#include<string>
#include<math.h>
usingnamespacestd;
intmyItoa(intdata,char*p,intnum)
{
if(p==NULL)
{
return-1;
}
if(data<0)
{
*p++="-";
data=0-data;
}
inttemp=0;
intflag=0;//标志位0-不存储1-存储
if(num==10)
{//十进制
for(inti=0;i<10;i++)
{
temp=static_cast<int>(data/pow(10.0,9-i));//pow(i,j),求i的j次方,temp取得当前最高位
if(temp!=0) //去掉最前面的0
{
flag=1;//将标志位变为1,可以存储
}
if(flag!=0)
{
*p++=temp+"0"; //变成字符
data=data%static_cast<int>(pow(10.0,9-i));
}
}
}
elseif(num==2)
{//二进制
for(inti=0;i<32;i++)
{
temp=static_cast<int>(data/pow(2.0,31-i));//int型,存储值最大为(2的31次方-1),
if(temp!=0)
{
flag=1;
}
if(flag!=0)
{
*p++=temp+"0";
data=data%static_cast<int>(pow(2.0,31-i));
}
}
}
elseif(num==16)
{//十六进制
for(inti=0;i<8;i++)
{
temp=static_cast<int>(data/pow(16.0,7-i));
if(temp!=0)
{
flag=1;
}
if(flag!=0)
{
if(temp>=0&&temp<=9)
{
*p++=temp+"0";
}
elseif(temp>=10&&temp<=15)
{
*p++=temp-10+"A";
}
data=data%static_cast<int>(pow(16.0,7-i));
}
}
}
elseif(num==8)
{//八进制
for(inti=0;i<16;i++)
{
temp=static_cast<int>(data/pow(8.0,15-i));
if(temp!=0)
{
flag=1;
}
if(flag!=0)
{
*p++=temp+"0";
data=data%static_cast<int>(pow(8.0,15-i));
}
}
}
}
int_tmain(intargc,_TCHAR*argv[])
{
inti=100;
chara[32]={0};
charb[32]={0};
charc[32]={0};
chard[32]={0};
cout<<i<<"的八进制表示为:";
myItoa(i,a,8);
cout<<a<<endl;
cout<<i<<"的十进制表示为:";
myItoa(i,b,10);
cout<<b<<endl;
cout<<i<<"的二进制表示为:";
myItoa(i,c,2);
cout<<c<<endl;
cout<<i<<"的十六进制表示为:";
myItoa(i,d,16);
cout<<d<<endl;
return0;
}
相关文章
- C++0x中一些有用的新特性
- c++实现简单的web服务器搭建
- 使用C++ OpenCV实现椭圆区域检测与Aruco码的生成与检测并估计位姿
- 斐波那契数列 -- C/C++ 实现
- LeetCode82. 删除排序链表中的重复元素 II(c++详解)
- c++ auto类型_auto C++
- C++中的Iu002FO重定向
- C/C++ 实现切片免杀的思路
- C++ Boost库 操作字符串与正则
- C/C++ 实现ShellCode编写与提取
- C/C++ 判断进程32位还是64位
- C/C++ 获取进程某模块入口地址
- C/C++ 实现COM转换到接口
- C/C++遍历某进程的模块
- C/C++ Qt TabWidget 实现多窗体创建
- OpenFSM是全网最好用的C++有限状态机
- C++ vector获取(访问)元素
- 如何选出最适合的C++ STL容器?
- C++实现正态随机分布的方法
- C++new/delete相关知识点详细解析
- C++实现多线程查找文件实例
- C++实现广度优先搜索实例
- C++实现不能被继承的类实例分析
- C++与C#互调dll的实现步骤