1

嗨,堆栈溢出者,

我目前正在解析一个同时包含文本和二进制数据的文件。目前,我正在以下列方式读取文件:

QTextStream in(&file);

int index = 0;
while(!in.atEnd()) {
    if (index==0) {
        QString line = in.readLine(); // parse file here
    } else {
        QByteArray raw_data(in.readAll().toAscii());
        data = new QByteArray(raw_data);
    }
    index++;
}

其中 data 是指我正在寻找的二进制数据。我不确定这是否是我想要的,因为 QString 被编码为 ascii,我不知道是否丢失了一些字节。

我检查了文档,它建议使用 QDataStream。如何在换行后结合这两种方法,即读取带有编码的行并读取二进制转储?

非常感谢您的帮助!

4

1 回答 1

1

这将做你想要的。

QTextStream t(&in);
QString line;
QByteArray raw_data;
if(!in.atEnd()) {line = t.readLine();}
in.reset();
int lineSize = line.toLocal8Bit().size() + 1;
in.seek(lineSize);
if(!in.atEnd())
{
    int len = in.size() - lineSize;
    QDataStream d(&in);
    char *raw = new char[len]();
    d.readRawData(raw, len);
    raw_data = QByteArray(raw, len);
    delete raw;
}

PS:如果文件格式是你的,最好用 QDataStream 创建文件,用 写入数据<<,用 读取数据>>。这样您就可以在没有此类问题的情况下进行存储QByteArray和归档。QString

于 2012-12-17T15:50:43.050 回答