2017-01-23 1 views
0

Eine seltsame Sache, die ich angetroffen habe, ist, dass in einer Schleife, die ich mache, wo ich eine QByteArray mit einem Brocken von QStringList bevölkert. Um genauer zu sein, die QStringList nimmt einen Standard QString und teilt es in kleinere Bits auf jedes Mal, wenn es auf ein "-" innerhalb der Zeichenfolge trifft. Ergo, wenn ein QString enthält "A1-B2-C3-D4-E5", würde es füllen Sie die Liste als kleine Stücke (list[0]="A1",list[1]="B2",list[2]="C3",...). Allerdings brauche ich diese Bytes, um eine QByteArray zu füllen und wenn ich eine Schleife verwende, nimmt es nur die Zeichen davon und füllt die QByteArray als bytearray[0]="A",bytearray[1]="1",bytearray[2]="2" und so weiter. In Anbetracht des Codes, den ich verwende, frage ich mich, was passiert ist? HierQString an ein QByteArray als hexadezimale Zeichen anhängen?

ist der Code:

QStringList inputArray = input.split('-'); 
       QByteArray output; 

       for(int i = 0; i < inputArray.count(); i++) 
       { 
        output.append(inputArray.at(i).toLatin1()); 
       } 

       ui->lineEdit->setText(output); 
+0

Ihre Frage ist - für mich zumindest - sehr unklar. Der Code, wie gepostet, tut * genau * was ich erwarten würde, was dazu führt, dass 'output' äquivalent zu' QByteArray ("A1B2C3D4E5") 'ist. –

+0

'Ich frage mich, was passiert ist?' Sie und alle anderen. – dtech

+0

Was ich will, ist, dass die Byte-Bits in ihrer Gesamtheit hinzugefügt werden müssen - derzeit habe ich das QByteArray wie dieses Bytearray [0] = "A", Bytearray [1] = "1", Bytearray [2] = "B", während ich es benötigen würde, um seine vollen Werte zu enthalten, dh Bytearray [0] = "A1", Bytearray [1] = "B2", Bytearray [2] = "C3". –

Antwort

1
qDebug() << QByteArray("ACDC"); // outputs "ACDC" 

Vorausgesetzt, dass diese Zeichenpaare in der Tat hexadezimal sind, müssen Sie angeben, dass sagen:

qDebug() << QByteArray::fromHex("ACDC"); // outputs "\xAC\xDC" 

Das ehemalige Byte-Array 4 Bytes sein lang, während letzteres nur 2 Bytes lang ist, da jedes Zeichenpaar als Hexadezimal dekodiert wird.

+0

Also gibt es keine Möglichkeit, die QStringList Chunks als Hex-Werte behandelt werden? –

+0

Genau das tut 'QByteArray :: fromHex()', wie ist es nicht klar? Ändern Sie einfach den Code in 'output.append (QByteArray :: fromHex (inputArray.at (i) .toLatin1()));' – dtech

+0

Es funktionierte nach einem "clean all" und "qmake". Vielen Dank! –