Ich arbeite mit der seriellen Kommunikation, und ich 32bit Ganzzahlen in einem QByteArray
, in 4 separaten Bytes (Little-Endian) gepackt. Ich versuche, den Wert aus dem 4 Bytes zu entpacken QByteArray::toLong()
verwenden, aber es scheitert die Konvertierung und gibt die falsche Nummer:Wie Entpacken 32-Bit-Integer in einem QByteArray verpackt?
quint8 packed_bytes[] { 0x12, 0x34, 0x56, 0x78 };
QByteArray packed_array { QByteArray(reinterpret_cast<char*>(packed_bytes),
sizeof(packed_bytes)) };
bool isConversionOK;
qint64 unpacked_value { packed_array.toLong(&isConversionOK) };
// At this point:
// unpacked_value == 0
// isConversionOK == false
Das erwartete unpacked_value
ist 0x78563412 (Little-Endian auspacken). Warum schlägt die Konvertierung fehl?
Vielen Dank für Ihre Antwort, aber Sie sehen in meinem Beitrag, dass ich mein Array in 'char *' umwandle, das die Ganzzahlen in eine Zeichenfolge umwandelt, wie Sie es beschreiben. Fehle ich etwas? Und warum schlägt die Konvertierung fehl (wie von der "Bool" angezeigt), anstatt nur ein falsches Ergebnis zurückzugeben? – DBedrenko
Können Sie diese Zeichenfolge richtig drucken und sehen Sie den richtigen Wert geschrieben? Dann sollte es funktionieren. Aber wenn die Byte-Werte den Wert repräsentieren, und nicht ihre Ascii-Darstellungen, brauchen Sie etwas wie meinen Ansatz. – Aaron
QByteArray :: toLong() interpretiert Ihre Bytes als eine mit \ 0 abgeschlossene Zeichenfolge. – Aaron