本文参考:http://www.cnblogs.com/applebunny/archive/2012/06/21/2557361.html
先看下itoa()的函数说明:
功能:把一整数转换为字符串
用法:char *itoa(int value, char *string, int radix);
详细解释:itoa是integer to array(将int整型转化为一个字符串,并将值保存在数组string中)的缩写。
参数:value :待转化的整数。
radix:是基数的意思,即将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。
*string:保存转换后得到的字符串。
返回值:char *:指向生成的字符串,同*string。
备注:该函数的头文件是“stdlib.h”(包含在iostream里面)
记住一点:itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。
是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似。
Example
/* sprintf example */ #include <stdio.h> int main () { char buffer [50]; int a=5; n=sprintf (buffer, "%d %o %x", a, a, a); printf ("[%s] is a string \n",buffer); return 0; }
备注:atoi()是标准库里面的函数,在C/C++语言参考函数里面有,而itoa()却没有,对此我们最好自己实现itoa()函数。
虽然可能itoa无法使用,但是我们可以编写自己的itoa()函数,以下是实现源代码:(对原文代码进行了改进)
#include<iostream> #include<string> using namespace std; void itoa0(int num,char *str,int radix) { const char a[]="0123456789abcdefghijklmnopqrstuvwxyz"; // 36个字母, 最多支持36进制 char ptr[200]; int len=0; unsigned int uNum; if (num==0) { *str++='0'; *str='\0'; return; } else if (num<0) { if(radix == 2) // 负数的二进制 显示其补码 uNum = (unsigned int) num; else { *str++='-'; num *=-1;//绝对值 uNum = num; } } while (uNum!=0) { ptr[len++]=a[uNum%radix]; uNum/=radix; } for (int i=len-1;i>=0;--i) { *str++=ptr[i]; } *str='\0'; } void main() { char result[200]; int num =-4; string str; itoa0(num,result,2); cout<<result<<endl; system("pause"); }