为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
犯罪嫌疑人X 2019-10-28 16:54:47
我有:uint8 buf[] = {0, 1, 10, 11};我想将字节数组转换为字符串,以便可以使用printf打印该字符串:printf("%s\n", str);得到(不需要冒号):"00:01:0A:0B"任何帮助将不胜感激。
查看完整描述

3 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

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");


查看完整回答
反对 回复 2019-10-28
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

这是一种更快的方法:


#include <stdlib.h>

#include <stdio.h>


unsigned char *     bin_to_strhex(const unsigned char *bin, unsigned int binsz,

                                  unsigned char **result)

{

  unsigned char     hex_str[]= "0123456789abcdef";

  unsigned int      i;


  if (!(*result = (unsigned char *)malloc(binsz * 2 + 1)))

    return (NULL);


  (*result)[binsz * 2] = 0;


  if (!binsz)

    return (NULL);


  for (i = 0; i < binsz; i++)

    {

      (*result)[i * 2 + 0] = hex_str[(bin[i] >> 4) & 0x0F];

      (*result)[i * 2 + 1] = hex_str[(bin[i]     ) & 0x0F];

    }

  return (*result);

}


int                 main()

{

  //the calling

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

  unsigned char *   result;


  printf("result : %s\n", bin_to_strhex((unsigned char *)buf, sizeof(buf), &result));

  free(result);


  return 0

}


查看完整回答
反对 回复 2019-10-28
  • 3 回答
  • 0 关注
  • 1017 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信