您的位置:首页 > 编程语言 > C语言/C++

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

2017-02-21 11:31 351 查看
方法一:

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;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: