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.
Überprüfen Sie den Stream 'status()', nachdem Sie daraus gelesen haben, ich schätze, Sie erhalten "gelesen über das Ende" Status. – Mat
Ich nehme an, dass das int Sie 4 Byte verwenden und Sie nur 2 Byte in das QByteArray! – xander
@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