将char数组转换为十六进制字符串并将其打印在一行中的方法

时间:2015-01-05 02:24:43

标签: c

这是一个char数组

char temp[] ={0x1f,0x2d,0x3c};

我想使用__android_log_print来打印temp,如何将它转换为“1f2d3c”并在没有for循环的情况下将其打印在一行中?

  

我的期望

enter image description here

  

现实

enter image description here

2 个答案:

答案 0 :(得分:0)

如果数组总是大小为3,那么:

__android_log_print(<whatever level>,"%02x%02x%02x", temp[0],temp[1],temp[2]);

答案 1 :(得分:0)

printf函数中替换printHex的日志函数。只要它被终止并且在它的中间没有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;
}