首页 > 解决方案 > 在C中输入十六进制到字符串输出

问题描述

我是 C 编程的初学者。我研究了如何解决我的问题,但我没有找到答案,所以我在这里问。我的问题是:

我想将十六进制数组转换为字符串。例如:

这是我的输入十六进制:uint8_t hex_in[4]={0x10,0x01,0x00,0x11};

我想像这样输出字符串:“10010011”

我尝试了一些解决方案,但它给了我“101011”作为摆脱零。

如何获取 8 位字符串?

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main(){

    char dene[2];
    uint8_t hex_in[4]={0x10,0x01,0x00,0x11};
    //sprintf(dene, "%x%*x%x%x", dev[0],dev[1],2,dev[2],dev[3]);
    //sprintf(dene, "%02x",hex_in[1]);
    printf("dene %s\n",dene);
}

标签: cstringhex

解决方案


为了将输出存储在字符串中,字符串必须足够大。在这种情况下,持有 8 位数字 + 空终止符。不是 2 = 1 位数字 + 空终止符。

%02x然后,您可以使用或打印每个数字%02X以获得 2 位数字。小写 x 给出小写abcdef,大写 X 给出ABCDEF- 否则它们是等价的。

更正的代码:

#include <stdio.h>
#include <stdint.h>

int main(void)
{
  char str[9];
  uint8_t hex_in[4]={0x10,0x01,0x00,0x11};
  sprintf(str,"%02x%02x%02x%02x\n", hex_in[0],hex_in[1],hex_in[2],hex_in[3]);
  puts(str);
}

虽然迂腐,但您应该始终使用来自以下的etc 说明符从uint8_tstdint.h 打印和其他类型:PRIx8inttypes.h

#include <inttypes.h>


sprintf(str,"%02"PRIx8"%02"PRIx8"%02"PRIx8"%02"PRIx8"\n", 
        hex_in[0],hex_in[1],hex_in[2],hex_in[3]);

推荐阅读