zl程序教程

您现在的位置是:首页 >  后端

当前栏目

深入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指定要转换成几进制的数字字符串(二进制,八进制,十进制,十六进制)。
如有不足之处,还望指正!!!
复制代码代码如下:

//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;
}