2016-11-01 5 views
0

Ich habe ein QByteArray Daten ganze Zahl, die, wenn ich es mit qDebug es etwas auszudrucken wie ergibt:QByteArray Konvertieren

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

Jetzt muß ich konvertieren, dass 4 Hex-String in eine 32-Bit-Ganzzahl, die ich brauche, um \x00 \x00 \xF3 \x8F zu einer ganzen Zahl zu analysieren. Ich habe versucht, den folgenden Code aber es funktioniert nicht:

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; 

Aber egal, wie hart ich versuche es nicht und druckt 0. Ich weiß nicht, was genau in der QByteArray los ... Ich denke, das ist eine triviale Aufgabe ist, aber ich kann es heraus

+0

Was ist 'rawData'? Was repräsentieren die Daten? –

+0

@SeanKuhlman Es ist nur etwas, was ich von Netzwerk-Socket ... Ich weiß nur, dass ich irgendwie diese 4 hex Zeichenfolge in Ganzzahl konvertieren muss. Ich meine, es ist das QByteArray, das ich in der Frage zeigte –

+0

Ist 'rawData.size()' gleich 10? Versuchen Sie 'ds << rawData.mid (6, 4);' als einzige Einfügung zu 'ds'. Die letzten vier Bytes scheinen codiert zu sein, da sie nicht als Zeichen gedruckt werden können. –

Antwort

0

IMHO, sollten Sie nicht manuell in einer solchen Art und Weise analysieren:

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

Dies könnte in Ihrem Fall durch so etwas wie diese ersetzt wird (es kann derzeit nicht testen, aber denken sollte funktionieren):

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

right() geben Sie (rechtsbündig) auf den angegebenen Länge Byte-Array getrimmt. Und dann:

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

fromHex() behandelt das hex representaion in QByteArray anstelle von Ihnen. Leider habe ich nicht den besseren Weg gefunden, Zahlen zu konvertieren, denn toInt und .data() scheinen nicht zu funktionieren (kann Ursache für die 0 im Beginn des 'hex' Byte Arrays sein)

Verwandte Themen