遍历 QByteArray 里的每一个元素(一个元素由2各字节构成)

如果  QByteArray 中的每个元素是由2个字节组成的(例如,16位整数),可以按照以下方式进行遍历:

QByteArray byteArray = ...;  // 假设已经初始化了 QByteArray 对象

// 确保字节数组的长度是偶数,因为每个元素使用两个字节
if (byteArray.size() % 2 == 0) {
    for (int i = 0; i < byteArray.size(); i += 2) {
        // 通过 QByteArray::mid() 方法获取两个字节的子数组
        QByteArray elementBytes = byteArray.mid(i, 2);

        // 将两个字节转换为相应的类型,例如 int16_t
        int16_t element;
        memcpy(&element, elementBytes.constData(), sizeof(int16_t));
        // 或者使用 qFromLittleEndian() 或 qFromBigEndian() 进行字节顺序转换
        // int16_t element = qFromLittleEndian<qint16>(elementBytes.constData());

        // 进行相应操作,例如打印元素值
        qDebug() << element;
    }
}

上述代码通过循环以步长为2遍历字节数组,并使用 mid() 方法获取两个字节的子数组。然后,可以使用 memcpy() 函数将这两个字节转换为相应的类型,例如 int16_t。还可以使用 Qt 提供的 qFromLittleEndian()qFromBigEndian() 函数进行字节顺序转换。

请注意,此示例假设字节数组的长度是偶数,以确保每个元素由两个字节组成。如果字节数组的长度不是偶数,您可能需要根据实际情况进行适当的处理。

猜你喜欢

转载自blog.csdn.net/qq_26093511/article/details/131866896