将QByteArray转换为整数

时间:2016-11-01 22:25:29

标签: c++ qt qbytearray

我有一个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究竟发生了什么。我认为这是一项微不足道的任务,但我无法弄清楚

1 个答案:

答案 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)