2

私はバイト画像配列を持っています。このバイト配列を別のバイト配列に書き込み、2 番目のバイト配列に別の値を追加したいのですが、このコードを使用していますが、何か問題があると思います。

 QByteArray byteArray;

 QDataStream ds(&byteArray,QIODevice::ReadWrite);

 ds<<(qint32)20;

 ds<<bArray;

 qint32 code;

 ds>>code;

ds>>codeをトレースすると、値は常に 0 ですが、実際には値が 20 である必要があり、ds.resetStatus();を使用しました。しかし、それは再び0値を返します

4

1 に答える 1

2

QDataStream::operator<<関数は、次の呼び出しが行われたときにデータの挿入を開始できる次の場所を指すように、ある種のポインター/イテレーター/インデックスを設定していると思われます。QDataStream::operator>>おそらく同じ場所から読み取りを開始します。

QDataStream::resetStatus()オブジェクトが読み取り/書き込みを行う位置は変更されません。QDataStream::Okエラーが発生した後にストリームから読み取れるようにステータスをリセットするだけです。

2 つのオブジェクトを使用できます。1QDataStreamつは への書き込み用QByteArrayで、もう 1 つは同じ からの読み取り用QByteArrayです。

QByteArray byteArray;

QDataStream ds_w(&byteArray,QIODevice::WriteOnly);
QDataStream ds_r(&byteArray,QIODevice::ReadOnly);

ds_w << (qint32)20;

ds_w << bArray;

qint32 code;

ds_r >> code;
于 2016-07-02T18:36:12.863 に答える