c-如何将十六进制值的字符数组作为纯文本通过串行发送



我正在使用STM32,并使用CoolTerm监控串行端口。

我有一个数组,它存储以下内容:0x01 0xFA 0xAA 0x05。。。等我想通过串行发送,并在纯文本中查看这些值。

当我使用以下内容时:

char array[10] = { 0x01, 0xFA, 0xAA, 0x05, 0x01, 0xFA, 0xAA, 0x05, 0x01, 0x01 };
HAL_UART_Transmit(&huart4, (uint8_t *)array, len, 1);

CoolTerm的输出为:

显示的是点而不是纯文本值,如果我切换到HEX模式,我可以看到这些值。

我需要输出的样子:

";0x01 0xFA 0xAA 0x05 0x01 0xFA0xAA 0x050x01 0x01">

我想这是由于数组存储字节文字,但我不知道在ASCII解码串行监视器中使用什么来查看纯文本中的十六进制。

您需要使用sprintf()char*,然后发送它

char* buf = malloc(5*len);
for (i = 0; i < len; i++)
sprintf(buf+5*i, "0x%02x ", array[i]);
HAL_UART_Transmit(&huart4, buf, 5*len-1, 1);
free(buf);

您需要分配五倍的字节数量,因为单个字节将转换为5:

0x??<space>

则不通过串行链路传输最后一个空间(因此5*len-1中的-1(。

您也可以在末尾添加一个n,而不是最后一个空格,然后发送它:

...
buf[5*len-1] = 'n';
HAL_UART_Transmit(&huart4, buf, 5*len, 1);
...

最新更新