QByteArray 到 QT C++ 中的短 Int 数组

QByteArray to short Int array in QT C++

我正在接收来自 UDP 套接字的 QByteArray。 QByteArray 有 52 个元素,每个元素包含从 0 到 9 - A 到 F 的值。现在,我想将这个 QByteArray 转换成一个包含 13 个元素的 short int 数组,这样 QByteArray 的前 4 个元素存储在 short int 的第一个元素中数组。

例如。 QByteArray = (002400AB12CD) -> ShortINT = [0024,00AB,12CD]

我试过连接 4 个元素,然后将它们转换为 Short INT。

您可以使用 QByteArray::data()QByteArray::constData() 来访问指向存储数据的指针,并使用 c cast 或 reinterp_cast 来转换特定类型。您还需要知道数据的字节顺序是 big-endian 还是小字节序。

#include <QByteArray>
#include <QDebug>
#include <QtEndian>

void test() {
    QByteArray data("\x00\x24\x00\xAB\x12\xCD", 6);
    qint16_be* p = (qint16_be*) data.data();
    int l = data.size() / sizeof(qint16_be);
    for (int i=0; i<l; i++) {
        qDebug() << i << hex << p[i];
    }
}

Qt 4 没有 _be 类型。您可以使用 qFromBigEndianqbswap 来交换字节。

#include <QByteArray>
#include <QDebug>
#include <QtEndian>

void test() {
    QByteArray data("\x00\x24\x00\xAB\x12\xCD", 6);
    qint16* p = (qint16*) data.data();
    int l = data.size() / sizeof(qint16);
    for (int i=0; i<l; i++) {
        qDebug() << i << hex << qFromBigEndian(p[i]);
    }
}