将char数组转换为十六进制字符串并在一行中打印的方法
way to convert char array to a hex string and print it in one line
这是一个字符数组
char temp[] ={0x1f,0x2d,0x3c};
我想使用 __android_log_print 打印温度,如何将其转换为“1f2d3c”并在没有 for 循环的情况下在一行中打印?
What i expected
Reality
如果数组的大小始终为 3,则:
__android_log_print(<whatever level>,"%02x%02x%02x", temp[0],temp[1],temp[2]);
在 printHex
函数中用您的日志函数替换 printf
。只要数组以 0 终止并且中间没有 0 字节,您就可以不传递数组的长度,因此您可以使用 strlen
来查找长度。
#include <stdio.h>
#include <string.h>
void printHex(char* digits, int len)
{
int i;
char* str;
str = malloc(len * 2 + 1);
memset(str, 0, len * 2 + 1);
for(i = 0; i < len; ++i)
{
char temp[3];
sprintf(temp, "%02x", digits[i]);
strcat(str, temp);
}
printf("%s\n", str);
free(str);
}
int main(void)
{
char temp[] ={0x1f,0x2d,0x3c,4,0,5,0,6,7,8};
printHex(temp, sizeof(temp));
return 0;
}
这是一个字符数组
char temp[] ={0x1f,0x2d,0x3c};
我想使用 __android_log_print 打印温度,如何将其转换为“1f2d3c”并在没有 for 循环的情况下在一行中打印?
What i expected
Reality
如果数组的大小始终为 3,则:
__android_log_print(<whatever level>,"%02x%02x%02x", temp[0],temp[1],temp[2]);
在 printHex
函数中用您的日志函数替换 printf
。只要数组以 0 终止并且中间没有 0 字节,您就可以不传递数组的长度,因此您可以使用 strlen
来查找长度。
#include <stdio.h>
#include <string.h>
void printHex(char* digits, int len)
{
int i;
char* str;
str = malloc(len * 2 + 1);
memset(str, 0, len * 2 + 1);
for(i = 0; i < len; ++i)
{
char temp[3];
sprintf(temp, "%02x", digits[i]);
strcat(str, temp);
}
printf("%s\n", str);
free(str);
}
int main(void)
{
char temp[] ={0x1f,0x2d,0x3c,4,0,5,0,6,7,8};
printHex(temp, sizeof(temp));
return 0;
}