#include <QThread> #include <QFile> #include <QByteArray> #include <QStringList> #include <QDebug> class FileReaderThread : public QThread { Q_OBJECT public: FileReaderThread(const QString &filePath, QObject *parent = nullptr) : QThread(parent), m_filePath(filePath) {} signals: void dataReady(const QList <QByteArray> &segments); protected: void run() override { QFile file(m_filePath); if (!file.open(QIODevice::ReadOnly)) { qWarning() << "Failed to open file:" << m_filePath; return; } QByteArray data = file.readAll(); file.close(); // 定义要查找的字符串 const QByteArray delimiter = QByteArray::fromHex("000001BA"); QList<QByteArray> segments; int lastIndex = 0; int index; // 查找并分割数据 while ((index = data.indexOf(delimiter, lastIndex)) != -1) { QByteArray segment = data.mid(lastIndex, index - lastIndex); if (!segment.isEmpty()) { segments.append(delimiter + segment); // qDebug() << segment; // qDebug() << "size " << segment.size(); } lastIndex = index + delimiter.size(); } // 处理最后一个段 if (lastIndex < data.size()) { QByteArray segment = data.mid(lastIndex); if (!segment.isEmpty()) { segments.append(delimiter + segment); } } emit dataReady(segments); } private: QString m_filePath; };