C语言将int型数据转换为十六进制的字符串
方法一:
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] = " "; //字符串结束标志 } 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] = " "; //字符串结束标志 } 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] = " "; //字符串结束标志 } 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 != " ") { 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 ",rs1); char *str2="bbbfffa"; char *rs2 = getCRC2(str2,buffer2); printf("rs2===>:%s ",rs2); char *str3 = "cccccccaaa"; char *rs3 = getCRC2(str3,buffer3); printf("rs3===>:%s ",rs3); return 0; }
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。