一、需求:
1、建立一个UI界面,可以与串口设备互相通信,能够发送16进制与字符串数据。
2、能够接收16进制与字符串数据。
二、本文解决问题:
串口接收数据存储在QBytArray中,当发送过来的数据为16进制与字符串的时候,如何匹配,并在UI界面输出。
思路:QByteArray存储为数据类型为2进制,本身没有类型,而是根据我们发射的数据类型来做相应的切换。
代码如下:
QByteArray message;
message.append(m_serialport->readAll());// 读取串口数据
QString strData;
//string输出
if (change_16_to_string)
{
strData = QString(message);
strData.remove(QRegExp("\\s+"));//删除字符串中所有空格
}
//hex16输出
else
{
QByteArray array= message.toHex();//转化为16进制数据
strData = QString(array);//转化为字符串,方便显示
strData.remove(QRegExp("\\s+"));//删除字符串中所有空格
}
2.1、显示接收数据-增加空格
程序中,转换为字符串后,都删除了字符串中所有的空格,然后再根据自己的显示需求添加空格,如,没两个字符之间增加一个空格:
//每条命令增加换行
for (int j = 29; j < strData.size(); j += 30)
{
strData.remove(j,1);
strData.insert(j, '\n');
}
2、分解命令,换行输出,如果原始数据中,每个数据长度为10字节,则换行显示方法:
//每条命令增加换行
for (int j = 29; j < strData.size(); j += 30)
{
strData.remove(j,1);
strData.insert(j, '\n');
}