Разбор qbytearray из двоичного файла - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь прочитать около 3000 двоичных файлов, каждый двоичный файл записан с прямым порядком байтов. Я ищу смещение файла и считываю весь буфер в qbytearray.

Двоичный формат - int32 длина строки; (4 байта) строка имя_строки; + 'null'

Пример файла:

//09 00 00 00 63 6f 6e 76 65 72 74 65 72 00 05 00 00 00 63 6f 75 6e 74 00
// 9 is the size then string.. then size then string..

QFile file("papers.bin");
if (!file.open(QIODevice::ReadOnly))
    return;

file.seek(file.size() - 266 );

QByteArray binarydata = file.readall();

//09 00 00 00 63 6f 6e 76 65 72 74 65 72 00 05 00 00 00 63 6f 75 6e 74

// l oop data

Как бы oop данные внутри qbytearray?

1 Ответ

2 голосов
/ 05 февраля 2020

Используйте QDataStream для чтения фрагментов:

QDataStream stream(binarydata);
stream.setByteOrder(QDataStream::LittleEndian);
while (!stream.atEnd()) {
    qint32 length;
    stream >> length;

    QByteArray buf(length, 0);
    stream.readRawData(buf.data(), length);
    QString str = QString::fromUtf8(buf);
    // do something with str

    stream.skipRawData(1); // Skip the 00 byte
}
...