2017-11-29 4 views
1

ich einen QByteArray in eine int mit dem folgenden Code zu konvertieren Ich versuche:QByteArray zu Int Umwandlung

int byteArrayToint(const QByteArray &ba, QDataStream::ByteOrder byteOrder) 
{ 
    int val = 0; 
    QDataStream stream(ba); 
    stream.setByteOrder(byteOrder); 
    stream >> val; 
    return val; 
} 

dann in der Hauptfunktion:

.... 
    QByteArray ba; 
    ba[0]=0x20; 
    ba[1]=0x17; 

    for(int i(0); i < ba.size(); i++) 
     qInfo() << QString("0x%1").arg((int)ba.at(i), 2, 16); 

    qInfo() << "date =" << byteArrayToint(ba, QDataStream::BigEndian); 
    ... 

und der Ausgang ist:

"0x20" 
"0x17" 
date = 0 

Aber wenn ich QByteArray ("Hello") statt der positiven verwenden, gibt es t Er erwartet Ergebnis:

"0x48" 
"0x65" 
"0x6c" 
"0x6c" 
"0x6f" 
date = 1214606444 

Ich kann nicht finden, wo der Fehler so weit ist. Ich weiß, dass Methoden, die Bit-Shifting verwenden, gut funktionieren, aber ich würde gerne verstehen, warum ich nicht dasselbe Ergebnis mit Qt-Klassen bekomme.

Danke für jede Hilfe.

+1

Überprüfen Sie den Stream 'status()', nachdem Sie daraus gelesen haben, ich schätze, Sie erhalten "gelesen über das Ende" Status. – Mat

+1

Ich nehme an, dass das int Sie 4 Byte verwenden und Sie nur 2 Byte in das QByteArray! – xander

+0

@Mat Sie haben Recht. Ich habe diesen Punkt nicht beachtet. Nachdem ich Nullen gemäß Endianess hinzugefügt habe, funktioniert es wie erwartet. Vielen Dank. – Scab

Antwort

2

In dieser Zeile:

stream >> val; 

you'reading sizeof(int) Bytes aus dem Strom in die Variable val.

Vorausgesetzt, dass sizeof(int) 4 ist, was auch immer Byte-Array von mindestens vier Bytes ist in Ordnung, einige Int-Wert zu senden (die verbleibenden Bytes werden ignoriert).