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

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

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

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

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

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-12-13
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

这是一种更快的方法:


#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-12-13
  • 3 回答
  • 0 关注
  • 321 浏览

添加回答

举报

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