如果 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()
函数进行字节顺序转换。
请注意,此示例假设字节数组的长度是偶数,以确保每个元素由两个字节组成。如果字节数组的长度不是偶数,您可能需要根据实际情况进行适当的处理。