QT串口接收十六进制


前段时间写了个“QT串口发送十六进制”,为了对应,现在来个下部剧集。

我要接收的数据比较长,“01 03 24 01 19 …………00 D5 F6”中间省略一大截,为将这些数据接收到一个字符串中,参考QT论坛里的文章,总结如下:

  1. QByteArray tmp;  
  2. if(highCom->bytesAvailable() >= 41)  
  3. {  
  4.     tmp = highCom->readAll();  
  5.     QDataStream out(&tmp,QIODevice::ReadWrite);  
  6.     while(!out.atEnd())  
  7.     {  
  8.       qint8 outChar = 0;  
  9.       out>>outChar;  
  10.       QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));  
  11.       strHex += str;  
  12.      }  
  13.     qDebug()<<strHex;  
  14. }  

没有贴出完整的函数,不过这部分就已经可以解决了。 strHex中就是存储的接收十六进制数据。

想要做什么处理,就根据实际情况来吧。

当然可以参考下面的代码

//读取串口
void MySerial::readMyCom()
{
    QByteArray temp;
    if(myCom->bytesAvailable() >= 8)
    {
        temp = myCom->readAll(); //读串口缓冲区数据 
    }
    QDataStream out(&temp,QIODevice::ReadWrite);    //将字节数组读入
    while(!out.atEnd())
    {
        qint8 outChar = 0;
        out>>outChar;   //每字节填充一次,直到结束
        QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));
        //十六进制的转换
        recBrowser->insertPlainText(str);
    }
    recBrowser->insertPlainText(tr("\n"));
}

那就在这里结束吧。

相关内容