10

QByteArray を関数に入力する関数を書きたいです。受信データから一部のヘッダーを削除し、それをグローバル QByteArray に格納したいと考えています。

void abc::CopyData(const QByteArray &data)
{
    switch(RequestPacketCount)
    {
        case REQUEST_FIRST_PACKET:
        {
            ByteArrayData = data;
        }
            break;
        case REQUEST_SECOND_PACKET:
        case REQUEST_THIRD_PACKET:
            ByteArrayData.append(data);
    }
}

「n」を削除したいです。'data' の先頭から 1 バイト分を取得し、残りのデータを 'ByteArrayData' に格納します。

前もって感謝します。

4

3 に答える 3

7

あなたが望むと思われるのは、元の配列をコピーしてremoveを使用することです。

ByteArrayData = data;
ByteArrayData.remove(0, n);            // Removes first n bytes of ByteArrayData,
                                       // leaving data unchanged

QByteArray は暗黙的に共有されるため、コピーの構築には一定の時間がかかり、変更 (削除) によって、必要に応じて実際のコピーが作成されます。

効率的に追加するには、データを使用してバイト配列を取得し、必要な部分を追加します。これにより、不要な一時オブジェクトが防止されます。それは次のようになります。

ByteArrayData.append(data.data() + n, data.size() - n);
于 2014-03-19T05:29:06.380 に答える