如何通过串行将十六进制值的字符数组作为纯文本发送
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);
...
我用的是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);
...