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

How can a char array of hex values be sent as plain text over serial

我用的是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 0xFA 0xAA 0x05 0x01 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:

0 x ? ? <space>

那么你不会通过串行 link 传输最后一个 space(因此 5*len-1 中的 -1)。

你也可以在末尾加一个\n代替最后的space,然后再传:

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