从QByteArray删除第一个字节

bep*_*ras 5 qt qbytearray

我想编写一个将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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我要删除“ n”号。从“数据”开始的字节数,并将剩余数据存储到“ ByteArrayData”

提前致谢。

Joa*_*son 5

您似乎想要的只是复制原始数组并使用remove ;

ByteArrayData = data;
ByteArrayData.remove(0, n);            // Removes first n bytes of ByteArrayData,
                                       // leaving data unchanged
Run Code Online (Sandbox Code Playgroud)

由于QByteArray是隐式共享的,因此副本的构建需要花费恒定的时间,而修改(删除)将在需要时生成实际的副本。

为了有效地附加,您可以只使用数据来获取字节数组,然后附加所需的部分。这样可以防止不必要的临时对象。看起来像;

ByteArrayData.append(data.data() + n, data.size() - n);
Run Code Online (Sandbox Code Playgroud)