c - 在 C 中如何将字节数组转换为十六进制字符串?

标签 c string hex

我有:

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

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

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

并获取(不需要冒号):

"00:01:0A:0B"

如有任何帮助,我们将不胜感激。

最佳答案

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 - 在 C 中如何将字节数组转换为十六进制字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6357031/

相关文章:

java - 替换字符串中的变量占位符

C++ 将带有十六进制字符的 .txt 转换为带有\x 的十六进制字符的 .text

c++ - 在 C++11 中,如何打印给定 Unicode 代码的字符?

c - 另一个C指针问题

python - 如何将字符串列表打印为没有中间字符的单个字符串

c - C 中的 fopen 和 fprintf 没有按预期工作?

java - 分组时如何根据一个字段中最长的 'string'从mysql数据库中选择记录?

c++ - 如何在 C++ 中从文件读取字节到十六进制字符串?

c - 在嵌入式 C 中传递字符串变量

c - 如何使用 C 迭代目录并在特定级别停止?