十進制轉換爲十六進制,有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);
}