【发布时间】:2017-03-15 03:40:25
【问题描述】:
我有一个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 到底发生了什么。我认为这是一项微不足道的任务,但我无法弄清楚
【问题讨论】:
-
什么是
rawData?数据代表什么? -
@SeanKuhlman 这只是我从网络套接字中获得的东西......我只知道我需要以某种方式将 4 十六进制字符串转换为整数。我的意思是这是我在问题中显示的 QByteArray
-
rawData.size()是否等于 10?尝试将ds << rawData.mid(6, 4);作为ds的唯一插入。最后四个字节看起来被编码,因为它们不能作为字符打印。 -
您确定数据是由另一端的
QDataStream创建的吗? -
至少我认为您在
QByteArray中错误地计算了偏移量——“\\”表示单个反斜杠字符。也就是说,上例中的rawData有22 个字节而不是26 个。
标签: c++ qt qbytearray