当前位置: 编程技术>c/c++/嵌入式
深入C++实现函数itoa()的分析
来源: 互联网 发布时间:2014-10-16
本文导语: 函数itoa()是将整数型转换为c语言风格字符串的函数,原型:char * itoa(int data, char*p, int num);data是传入的带转化的数字,为整型变量(data的最大值为2的31次方减去1),p是传入的字符型指针,指向存储转换后字符串空间的...
函数itoa()是将整数型转换为c语言风格字符串的函数,原型:
char * itoa(int data, char*p, int num);
data是传入的带转化的数字,为整型变量(data的最大值为2的31次方减去1),p是传入的字符型指针,指向存储转换后字符串空间的首地址;num指定要转换成几进制的数字字符串(二进制,八进制,十进制,十六进制)。
如有不足之处,还望指正!!!
// TestInheritance.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
#include
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(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(pow(10.0, 9-i));
}
}
}
else if (num == 2)
{//二进制
for (int i = 0; i < 32; i++)
{
temp = static_cast(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(pow(2.0, 31 - i));
}
}
}
else if (num == 16)
{//十六进制
for (int i = 0; i < 8; i++)
{
temp = static_cast(data / pow(16.0, 7-i));
if (temp != 0)
{
flag = 1;
}
if (flag != 0)
{
if (temp >= 0 && temp = 10 && temp
深入C++浮点数无效值定义与判定的解决办法
深入C++可见性与生命期的区别详解
深入C++四种强制类型转换的总结
用C++实现strcpy(),返回一个char*类型的深入分析
c++关键字mutable深入解析
深入分析C++中两个大数相乘结果不正确的问题
深入理解:Java是类型安全的语言,而C++是非类型安全的语言
深入理解C++中常见的关键字含义
深入分析C++中执行多个exe文件方法的批处理代码介绍
从汇编看c++中变量类型的深入分析
C++ using namespace std 用法深入解析
深入解析C++中的mutable关键字
C++实现strcmp字符串比较的深入探讨
C++中virtual继承的深入理解
Web服务器/前端
iis7站长之家
C++ Vector用法深入剖析
深入C++中API的问题详解
C++中const的实现机制深入分析
深入C++中inline关键字的使用
char * itoa(int data, char*p, int num);
data是传入的带转化的数字,为整型变量(data的最大值为2的31次方减去1),p是传入的字符型指针,指向存储转换后字符串空间的首地址;num指定要转换成几进制的数字字符串(二进制,八进制,十进制,十六进制)。
如有不足之处,还望指正!!!
代码如下:
// TestInheritance.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
#include
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(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(pow(10.0, 9-i));
}
}
}
else if (num == 2)
{//二进制
for (int i = 0; i < 32; i++)
{
temp = static_cast(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(pow(2.0, 31 - i));
}
}
}
else if (num == 16)
{//十六进制
for (int i = 0; i < 8; i++)
{
temp = static_cast(data / pow(16.0, 7-i));
if (temp != 0)
{
flag = 1;
}
if (flag != 0)
{
if (temp >= 0 && temp = 10 && temp