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 の使用が推奨されています。1 つの改行の後で、エンコーディングを使用して行を読み取り、バイナリ ダンプも読み取るなど、両方のアプローチを組み合わせるにはどうすればよいですか?

助けていただければ幸いです。

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 でファイルを作成し、 でデータを書き込み<<、 で読み取る方がよいでしょう>>。このようにして、このような問題なくファイルに保存できますQByteArrayQString

于 2012-12-17T15:50:43.050 に答える