我有一个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
究竟发生了什么。我认为这是一项微不足道的任务,但我无法弄清楚
答案 0 :(得分:0)
恕我直言,你不应该以这种方式手动解析:
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()似乎无法正常工作(可能是因为&#39; hex&#39;字节数组的原因导致0)