2016-11-01 5 views
0

У меня есть данные QByteArray, который, когда я печатаю его с QDebug он дает что-то вроде:Преобразование QByteArray в целое

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

Что такое 'rawData'? Что представляют данные? –

+0

@SeanKuhlman Это просто то, что я открываю из сетевого сокета ... Я просто знаю, что мне нужно каким-то образом преобразовать эту шестнадцатеричную строку в целое. Я имею в виду, что QByteArray я показал в вопросе –

+0

Выполняет ли 'rawData.size()' равно 10? Попробуйте 'ds << rawData.mid (6, 4);' как единственную вставку в 'ds'. Последние четыре байта выглядят закодированными, поскольку они не могут быть напечатаны как символы. –

ответ

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() обрабатывает шестигранную representaion в QByteArray вместо вас. К сожалению, в настоящее время нет лучшего способа конвертировать число, потому что toInt и .data(), похоже, не работают (может быть причиной 0 в начале массива байтов 'hex')