十進制轉換爲十六進制

       十進制轉換爲十六進制,有3種方式實現,其中兩種是使用系統函數,另外一種是直接本身編寫。函數

使用系統函數實現要加入#include <stdlib.h>,本身編寫則不須要這個頭文件。遞歸

       下面的代碼就是3種方式的實現,(2的31次方之內)均可以。可本身選擇須要的實現方式。索引


1. char *  itoa ( int value, char * str, int base );value是要轉化的數字,str是轉化後的字符串存儲的位置,base是進制數(可是這個函數不是標準C函數,有些編譯器是不支持的!)。因此代碼能夠爲:字符串

char buffer [33]; //用於存放轉換好的十六進制字符串,可根據須要定義長度編譯器

char * inttohex(int aa)it

{編譯

    itoa (aa, buffer, 16);循環

    return (buffer);方法

}static


2. sprintf(str,"%x",value);str是轉化存儲的位置,%x表示十六進制格式,value是要轉化的數字。因此代碼能夠爲:

char buffer [33]; //用於存放轉換好的十六進制字符串,可根據須要定義長度

char * inttohex(int aa)

{

    sprintf(buffer, "%x", aa);

    return (buffer);

}


3. 本身編寫

若是參數是任意整數,因爲計算方法是每次都除以16和對16取餘數,餘數以倒序的順序排列就是結果,因此最佳方法是用遞歸函數(固然循環也能夠,但須要最後再進行倒序)。遞歸代碼以下:


char buffer [33]; //用於存放轉換好的十六進制字符串,可根據須要定義長度

char * inttohex(int aa)

{

    static int i = 0;

    if (aa < 16)            //遞歸結束條件 

    {

        if (aa < 10)        //當前數轉換成字符放入字符串 

            buffer[i] = aa + '0';

        else

            buffer[i] = aa - 10 + 'A';

        buffer[i+1] = '\0'; //字符串結束標誌 

    }

    else

    {

        inttohex(aa / 16);  //遞歸調用 

        i++;                //字符串索引+1 

        aa %= 16;           //計算當前值

        if (aa < 10)        //當前數轉換成字符放入字符串 

            buffer[i] = aa + '0';

        else

            buffer[i] = aa - 10 + 'A';

    }

    return (buffer);

}

相關文章
相關標籤/搜索