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
类型。您可以使用 qFromBigEndian
或 qbswap
来交换字节。
#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]);
}
}
我正在接收来自 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
类型。您可以使用 qFromBigEndian
或 qbswap
来交换字节。
#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]);
}
}