方法一:
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
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;
}