C语言将int型数据转换为十六进制的字符串

来源:互联网 发布:剑三正太捏脸数据 编辑:程序博客网 时间:2024/06/05 19:30



方法一:

int i =0;char * inttohex(int aa,char *buffer){    if (aa < 16)            //递归结束条件    {        if (aa < 10)        //当前数转换成字符放入字符串            buffer[i] = aa + '0';        else            buffer[i] = aa - 10 + 'a';        buffer[i+1] = '\0'; //字符串结束标志    }    else    {        inttohex(aa / 16,buffer);  //递归调用        i++;                //字符串索引+1        aa %= 16;           //计算当前值        if (aa < 10)        //当前数转换成字符放入字符串            buffer[i] = aa + '0';        else            buffer[i] = aa - 10 + 'a';    }    return (buffer);}

由于使用了全局变量i来记录下标,每次在调用函数转换前都需要将将i设置成0;


方法二,使用静态变量:

char * inttohex(int aa,char *buffer){    static int  i = 0;    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,buffer);  //递归调用        i++;                //字符串索引+1        aa %= 16;           //计算当前值        if (aa < 10)        //当前数转换成字符放入字符串            buffer[i] = aa + '0';        else            buffer[i] = aa - 10 + 'a';    }    return (buffer);}



测试代码如下:


char * inttohex(int aa,char *buffer){    static int  i = 0;    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,buffer);  //递归调用        i++;                //字符串索引+1        aa %= 16;           //计算当前值        if (aa < 10)        //当前数转换成字符放入字符串            buffer[i] = aa + '0';        else            buffer[i] = aa - 10 + 'a';    }    return (buffer);}int my_strLength(char *str){    int len = 0;    while (*str != '\0') {        len++;        str++;    }    return len;}char * getCRC2(char *string,char *buffer){    int len = my_strLength(string);    int sum = 0;    for (int i=0; i<len; i++) {        sum += (string[i] + i%10);    }    int low = sum & 0xffff;//获取低16位    return inttohex(low,buffer);}int main(int argc, const char * argv[]) {        char buffer1[5],buffer2[5],buffer3[5];    char *str1 = "aaaaaaafadsfasdf";    char *rs1 = getCRC2(str1,buffer1);    printf("rs===>:%s \r\n",rs1);          char *str2="bbbfffa";    char *rs2 = getCRC2(str2,buffer2);    printf("rs2===>:%s \r\n",rs2);    char *str3 = "cccccccaaa";    char *rs3 = getCRC2(str3,buffer3);    printf("rs3===>:%s \r\n",rs3);        return 0;}





0 1