如何解决如何将十六进制值的字符数组作为纯文本通过串行发送
我使用的是 STM32,并使用 CoolTerm 监控串口。
我有一个数组,它存储以下内容:0x01 0xFA 0xAA 0x05 ...等。 我想通过串行发送它并以纯文本形式查看这些值。
当我使用以下内容时:
char array[10] = { 0x01,0xFA,0xAA,0x05,0x01,0x01 };
HAL_UART_Transmit(&huart4,(uint8_t *)array,len,1);
CoolTerm 的输出是:
。 . . . . . . . . .
显示的是点而不是纯文本值,如果我切换到十六进制模式,我可以看到这些值。
我需要输出的样子:
“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 倍的字节数,因为单个字节会变成 5 个:
0
x
?
?
<space>
那么您就不会通过串行链路传输最后一个空格(因此 -1
中的 5*len-1
)。
也可以在末尾加一个\n
而不是最后一个空格,然后再传输:
...
buf[5*len-1] = '\n';
HAL_UART_Transmit(&huart4,5*len,1);
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。