先看下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类似。
备注:atoi()是标准库里面的函数,在C/C++语言参考函数里面有,而itoa()却没有,对此我们最好自己实现itoa()函数。
虽然可能itoa无法使用,但是我们可以编写自己的itoa()函数,以下是实现源代码:
1 //n是要被转换的十进制数,bit是要被转换的进制数 2 #include <iostream> 3 #include <string> 4 using namespace std; 5 6 char * Ten_to_other(int num,char* str, int radix) 7 { 8 const char a[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 9 char *ptr=str; 10 bool negtive = false; 11 if(num==0) 12 { 13 *ptr++=0; 14 *ptr='\0'; 15 return NULL;//直接就退出,不走后面的情况了,不跟后面共用一个return语句。 16 } 17 if(num<0) 18 { 19 num *= -1; 20 *ptr++ ='-'; 21 negtive = true; 22 } 23 while(num) //不能处理num=0的情况 24 { 25 *ptr++=a[num%radix]; 26 num /= radix; 27 } 28 *ptr='\0';//此时ptr已经指向字符串结尾,而str仍旧指向字符串开始。 29 ptr--;//让ptr指向字符串内容!! 30 char *start=(negtive)? str+1:str;//注意此处不能写str++,否则,str不指向保存值的首地址了 31 while(start<ptr) 32 { 33 char tmp=*ptr; 34 *ptr=*start; 35 *start=tmp; 36 ptr--; 37 start++; 38 /*char tmp=*ptr--;//这样写ptr,str都加了那么多遍,肯定错了啊!!! 39 *ptr--=*str++; 40 *str++=tmp;*/ 41 } 42 /*int len=strlen(str); 43 int i = (negtive)? 1:0; 44 for(i; i<len/2; ++i) //当为负数时候,str字符串最后的字符不能用len-1-i了,因为此时i=1而不是0 45 { 46 char tmp = str[i]; 47 str[i]=str[len-1-i]; 48 str[len-1-i]=tmp; 49 } */ 50 return NULL; 51 } 52 int main() 53 { 54 char a[12]={0}; 55 Ten_to_other(-82,a,6); 56 cout<<a<<endl; 57 system("pause"); 58 return 0; 59 }