先看下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 }