在QT中确定的已收到的字符串后,如何保存在数组中

How save in an array the following 100 received value after a determined received string in Qt

本文关键字:何保 数组 存在 字符串 QT      更新时间:2023-10-16

我是C 和QT中的新手。我想在收到字符串后的串行端口中保存在一个数组中:"数据"。我正在使用终端示例,因此串行ports正常工作。

The read function in the Example is the same:
void MainWindow::readData()
{
    QByteArray data = serial->readAll();
    console->putData(data);
}

如何修改它?谢谢!!!

如果您的手册发送数据,我建议您添加框架定界符的启动以及框架定界符和校验和校验的结尾。

 QByteArray packet_storage;

只是将其声明为您声明串行的位置。 StartOfMessage and EndOfMessage将取决于您的设备。我不知道你的传播是什么。希望您可以从设备的文档中找出您的发送内容。

至于我,我正在使用

 enum Constants
   {
       StartOfMessage  = 'x02',   /* Value of byte that marks the start of a message */
       EndOfMessage    = 'x03',   /* Value of byte that marks the end of a message */
       CarridgeReturn  = 'x0D',   /* Carridge return is first byte of end of line */
       LineFeed        = 'x0A',   /* Line feed is second byte of end of line */
       NullChar        = ''      /* Null Character */
   };
void MainWindow::readData()
{
     // read all 
     QByteArray data = serial->readAll();
     // store all read data packet_storage is a QByteArray
     packet_storage.append(data);
     int start_index = 0;
     int end_index = 0;
     // process packet if not empty
     if(!packet_storage.isEmpty())
     {
         if( packet_storage.contains(StartOfMessage) &&  packet_storage.contains(EndOfMessage))
         {
                    start_index = packet_storage.indexOf(StartOfMessage,0);
                    end_index   = packet_storage.indexOf(EndOfMessage,0);
                    int length = 0;
                    for (int i=start_index; i <= end_index; i++)
                    {
                        length++;
                    }
                    // get data
                    QByteArray dt = packet_storage.mid(start_index,length);
                    // do your processing here. 
                    // store in vector write to file etc.
                    processpacket(dt);                         
                    packet_storage.remove(start_index,dt.size());
           }
       }
}