-
itoa
鎖定
itoa是廣泛使用的非標準C語言和C++語言擴展功能。但因為它是一個非標準的C / C++語言功能,因此不能好好的被所有編譯器使用。在大多數Windows下的編譯器通常在頭文件包含非標準函數。itoa()函數把整數轉換成字符串,並返回指向轉換後的字符串的指針。
- 中文名
- itoa函數
- 外文名
- itoa
- 別 名
- 整型轉換字符數組函數
- 表達式
- itoa(int,char*,int)
- 適用領域
- C/C++
- 應用學科
- 計算機科學
- 頭文件
- (C++版本:)
- 功 能
- 把int轉換為char*字符數組
目錄
- 1 功能
- 2 用法
- 3 實現itoa函數的源代碼
- 4 實例
itoa功能
功能:將整型的數字變量轉換為字符數組變量。
itoa用法
char *itoa (int value, char *str, int base );
int value 被轉換的整數,char *string 轉換後儲存的字符數組,int radix 轉換進制數,如2,8,10,16 進制等,大小應在2-36之間。
程序例子如下:
#include <stdlib.h>//cstdlib和stdlib.h都可以 #include <stdio.h>//cstdio和stdio.h都可以 //如果用的是cstdio和cstdlib,要加上 using namespace std; int main(void) { int number = 123456; char string[25]; itoa(number, string,1 0); printf("integer=%d string=%s\n", number, string); return 0; }
itoa實現itoa函數的源代碼
char* itoa(int num,char* str,int radix) {/*索引表*/ char index[]="0123456789ABCDEF"; unsigned unum;/*中間變量*/ int i=0,j,k; /*確定unum的值*/ if(radix==10&&num<0)/*十進制負數*/ { unum=(unsigned)-num; str[i++]='-'; } else unum=(unsigned)num;/*其他情況*/ /*轉換*/ do{ str[i++]=index[unum%(unsigned)radix]; unum/=radix; }while(unum); str[i]='\0'; /*逆序*/ if(str[0]=='-') k=1;/*十進制負數*/ else k=0; for(j=k;j<=(i-1)/2;j++) { char temp; temp=str[j]; str[j]=str[i-1+k-j]; str[i-1+k-j]=temp; } return str; }
itoa實例
itoa的第三個參數用於將數字轉換成不同的進制。例如:
#include<cstdlib> #include<cstdio> int main(void) { int number=12345; char string[25]; itoa(number,string,10);//按十進制轉換 printf("integer=%dstring=%s\n",number,string); itoa(number,string,16);//按16進制轉換 printf("integer=%dstring=%s\n",number,string); return 0; }
輸出結果:
integer=12345string=12345 ——説明12345的十進制表示就是12345
integer=12345string=3039 ——説明12345的十六進制表示是0x3039
但是要注意,itoa並是一個非標準的C/C++函數,它是Windows持有的,如果要寫跨平台的程序,請用sprintf。
MSDN的例子
/*ITOA.C:Thisprogramconvertsintegersofvarious *sizestostringsinvariousradixes. */ #include<cstdlib> #include<cstdio> int main(void) { char buffer[20]; int i=3445; long l=-344115L; unsigned long ul=1234567890UL; _itoa(i,buffer,10); printf("Stringofinteger%d(radix10):%s\n",i,buffer); _itoa(i,buffer,16); printf("Stringofinteger%d(radix16):0x%s\n",i,buffer); _itoa(i,buffer,2); printf("Stringofinteger%d(radix2):%s\n",i,buffer); _ltoa(l,buffer,16); printf("Stringoflongint%ld(radix16):0x%s\n",l,buffer); _ultoa(ul,buffer,16); printf("Stringofunsignedlong%lu(radix16):0x%s\n",ul,buffer); return 0; }
Outout:
Stringofinteger3445(radix10):3445 Stringofinteger3445(radix16):0xd75 Stringofinteger3445(radix2):110101110101 Stringoflongint-344115(radix16):0xfffabfcd Stringofunsignedlong1234567890(radix16):0x499602d2
指定要轉換的進制的基數,其值應在2-36之間。
這個其實是C/C++非標準庫中的函數,而是Windows平台下擴展的,標準庫中有sprintf(注意是標準庫),功能比這個強的多的啦,用法跟printf有點神似:
char str[255]; sprintf(str,"%x",100); //將100轉為16進製表示的字符串。