在与串口通信时,我需要给串口发送指定报文格式的命令,在接收到串口返回的数据后需要转换成浮点数并且显示出来。这里讲一下我自己碰到的问题,以及我发现的解决方法,如果大家有更好的方法可以在下方留言一起讨论。
为了模拟真实的串口通信环境,我这里是用自己写的软件和在网上下载的串口助手进行数据交互。由串口助手发送"42F6CCCD",在自己写的窗口中转换成浮点数并显示。然而本应该显示"123.4",但是显示出来却变成"6.27543e-41",显然肯定是有问题的。
QByteArray strhex = my_serialport->readAll();
qDebug()<<strhex;
//输出"B\xF6\xCC\xCD"
经过排查我发现如果将读取的数据直接打印出来会输出"B\xF6\xCC\xCD",然后按照Qt中十六进制的表示方法应该是"x42\xF6\xCC\xCD"。
我尝试输入不同的数据,发现当高位字节为"2~6"时打印出来的数据就会出错,但是在网上也没有找到类似的问题,于是换了一种思路,将读取的数据按字节转换为十六进制。
这里先放出在网上找到的十六进制转换的函数:
char MainWindow::ConvertHexChar(char ch)//十六进制转换工具
{
if((ch >= '0') && (ch <= '9'))
return ch-0x30;
else