十进制转换为十六进制

       十进制转换为十六进制,有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);

}

相关文章
相关标签/搜索