如何在C中将缓冲区(字节数组)转换为十六进制字符串?

我知道类似的问题已被要求java,c#,c,等,但我找不到一种方法将字节数组转换为C中的十六进制字符串。

我有:

uint8 buf[] = {0, 1, 10, 11};

我想将字节数组转换为字符串,使我可以使用printf打印字符串:

printf("%s\n", str);

和get(冒号不必要):

"00:01:0A:0B"

任何帮助将不胜感激。

解:
感谢大家的帮助。

我有一个解决方案:

char buf[] = {0,1,10,11};
int i;
char* buf_str = (char*) malloc (2*size + 1);
char* buf_ptr = buf_str;
for (i = 0; i < size; i++)
{
    buf_ptr += sprintf(buf_ptr, "%02X", buf[i]);
}
sprintf(buf_ptr,"\n");
*(buf_ptr + 1) = '\0';
printf("%s\n", buf_str);
最佳答案
printf("%02X:%02X:%02X:%02X", buf[0], buf[1], buf[2], buf[3]);

为更通用的方式:

int i;
for (i = 0; i < x; i++)
{
    if (i > 0) printf(":");
    printf("%02X", buf[i]);
}
printf("\n");

连接到一个字符串,有几种方法,你可以做到这一点…我可能保留一个指针到字符串的结尾,并使用sprintf。你还应该跟踪数组的大小,以确保它不会大于分配的空间:

int i;
char* buf2 = stringbuf;
char* endofbuf = stringbuf + sizeof(stringbuf);
for (i = 0; i < x; i++)
{
    /* i use 5 here since we are going to add at most 
       3 chars, need a space for the end '\n' and need
       a null terminator */
    if (buf2 + 5 < endofbuf)
    {
        if (i > 0)
        {
            buf2 += sprintf(buf2, ":");
        }
        buf2 += sprintf(buf2, "%02X", buf[i]);
    }
}
buf2 += sprintf(buf2, "\n");

转载注明原文:如何在C中将缓冲区(字节数组)转换为十六进制字符串? - 代码日志