複製鏈接
請複製以下鏈接發送給好友

itoa

鎖定
itoa是廣泛使用的非標準C語言和C++語言擴展功能。但因為它是一個非標準的C / C++語言功能,因此不能好好的被所有編譯器使用。在大多數Windows下的編譯器通常在頭文件包含非標準函數。itoa()函數把整數轉換成字符串,並返回指向轉換後的字符串的指針。
中文名
itoa函數
外文名
itoa
別    名
整型轉換字符數組函數
表達式
itoa(int,char*,int)
適用領域
C/C++
應用學科
計算機科學
頭文件
(C++版本:)
功    能
把int轉換為char*字符數組

itoa功能

功能:將整型的數字變量轉換為字符數組變量。

itoa用法

char *itoa (int value, char *str, int base );
返回值:返回指向str的指針,無錯誤返回。 [1] 
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進製表示的字符串。
參考資料
  • 1.    姚元 ,冷鵬,楊東華.TURBO C參考手冊:科海培訓中心資料組,2013:114-115