源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

深入C++实现函数itoa()的分析

  • 时间:2021-08-28 19:16 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:深入C++实现函数itoa()的分析
[b]函数itoa()是将整数型转换为c语言风格字符串的函数[/b],原型: char * itoa(int data, char*p, int num); data是传入的带转化的数字,为整型变量(data的最大值为2的31次方减去1),p是传入的字符型指针,指向存储转换后字符串空间的首地址;num指定要转换成几进制的数字字符串(二进制,八进制,十进制,十六进制)。 [b]如有不足之处,还望指正!!! [/b]
[u]复制代码[/u] 代码如下:
// TestInheritance.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <string> #include <math.h> using namespace std; int myItoa(int data, char* p, int num) {  if (p == NULL)  {   return -1;  }  if (data < 0)  {   *p++ = '-';   data = 0 - data;  }  int temp = 0;  int flag = 0; //标志位 0-不存储 1-存储  if (num == 10)  {//十进制   for (int i = 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));    }   }  }  else if (num == 2)  {//二进制   for (int i = 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));    }   }  }  else if (num == 16)  {//十六进制   for (int i = 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';     }     else if (temp >= 10 && temp <= 15)     {      *p++ = temp - 10 + 'A';     }     data = data % static_cast<int>(pow(16.0, 7 - i));    }   }  }  else if (num == 8)  {//八进制   for (int i = 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(int argc, _TCHAR* argv[]) {   int i = 100;  char a[32] ={0};  char b[32] ={0};  char c[32] ={0};  char d[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;  return 0; }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部