将QByteArray转换为整数

Converting QByteArray to integer

本文关键字:整数 转换 QByteArray      更新时间:2023-10-16

我有一个QByteArray数据,当我用qDebug打印出来时,它会产生如下内容:

qDebug() << rawData; 
//here is the reult:
MXTP24\x00\x00\xF3\x8F

现在我需要将4十六进制字符串转换为32位整数,也就是说我需要将x00 x00 xF3 x8F解析为整数。我尝试了以下代码,但失败了:

QDataStream ds;
ds << rawData.mid(8,2);
ds << rawData.mid(13,2);
ds << rawData.mid(18,2);
ds << rawData.mid(23,2);
quint32 sampleCounter = 0;
ds >> sampleCounter;
qDebug() << "PARSER => onReceivePacket => sampleCounter => " << sampleCounter;

但是不管我怎么努力,它失败了,打印0。我不知道QByteArray到底发生了什么。我认为这是一个微不足道的任务,但我不能解决它

恕我直言,您不应该以这种方式手动解析:

QDataStream ds;
ds << rawData.mid(8,2);
ds << rawData.mid(13,2);
ds << rawData.mid(18,2);
ds << rawData.mid(23,2);

在你的情况下,这可以替换为这样的东西(目前无法测试,但认为应该工作):

QByteArray hexEncoded = rawData.right(rawData.size() - 6); // 6 is len of "MXTP24"

right()给你修剪(右对齐)到指定长度的字节数组。然后:

QByteArray decoded = QByteArray::fromHex(hexEncoded);
quint32 sampleCounter = 0;
for (int i = 0; i < 4; ++i) {
    sampleCounter += (quint8)decoded.at(i) << (3 - i) * 8;
}

fromHex()处理QByteArray中的十六进制表示,而不是您。不幸的是,目前还没有找到更好的方法来转换数字,因为toInt和。data()似乎不起作用(可能是由于'hex'字节数组开头为0的原因)