Seite 1 von 1

(closed) Elemente aus QByteArray nach *char casten?

Verfasst: 9. März 2011 13:39
von huckleberry
Hallo Foristen,

ich habe ein QByteArray mit beispielsweise einigen Bytes

Code: Alles auswählen

 QByteArray datensatz = QByteArray::fromHex("0001020304");
dann habe ich noch eine QTableWidget wo ich für jeden Datensatz in einer Zeile einzelne Elemente dieses QByteArrays pro Byte spaltenweise ausgeben wollte.
Also stünde sollte für meine Variable datensatz in dieser Zeile eine 0 in der ersten spalte, eine 1 in der zweiten Spalte usw.. stehen..
datensatz --> | 0 | 1 | 2 | 3 | 4 |

Code: Alles auswählen

 for (quint64 j = 0; j < *anzahlSpalten; j++) {
        tmpQBA = QByteArray::fromHex("0001020304")

        newItem = new QTableWidgetItem( tr(tmpQBA.at(0)) );
        this->dTableWidget->setItem(j, 1, newItem);
        newItem = new QTableWidgetItem( tmpQBA.at(1) );
        this->dTableWidget->setItem(j, 2, newItem);
        newItem = new QTableWidgetItem( tmpQBA.at(2) );
        this->dTableWidget->setItem(j, 3, newItem);
        newItem = new QTableWidgetItem( tmpQBA.at(3) );
        this->dTableWidget->setItem(j, 4, newItem);
        newItem = new QTableWidgetItem( tmpQBA.at(4) );
        this->dTableWidget->setItem(j, 5, newItem);
    }
Hier " newItem = new QTableWidgetItem( tr(tmpQBA.at(0)) );" sagt der Compiler:
/blabla/mainwindow.cpp:146: error: invalid conversion from 'char' to 'const char*'

und die folgenden binären Hex werte werden gar nicht angezeigt, da diese nichtdarstellbare ASCII Zeichen sind.. beispielsweise ist 0x04 == End Of Transmission.

Wie kann ich die 0x01 in ein int mit dem Wert 1 casten?

Ich danke für alle Hinweise.

Mfg Huck

Verfasst: 9. März 2011 18:39
von Christian81
tr() möchte ein (const) char *, QByteArray.at() gibt aber ein char zurück - was sollte der Compiler also anders machen?
Des weiteren - \0x01 als Zeichen - was willst Du damit anfangen? Was soll das für ein Zeichen sein?? Wenn Du ne 1 darstellen willst dann nimm "1" ...

Verfasst: 9. März 2011 20:45
von huckleberry
Das alles seine Richtigkeit hat, ist mir ja klar, hilft mir aber nicht bei meinem Problem weiter einzelne Elemente eines QByteArrays jeweils in einem Tabellenfeld auszugeben.

Also ich habe 0-255 also 0x00 bis 0xff in einer Binärdatei. Dann würde ich gerne die entsprechende Dezimalzahl ausgeben. Wenn also das i-te Element meines

QByteArray tmp = .. 41 03 45 F4 5E FF 57 9A ..

zB 0x41 ist, soll in einem Tabellenfeld eines QTableWidgets die dezimale 65 stehen und nicht 'A'. Hoffe dies war verständlich. Im nächsten Tabellenfeld würde dann eine 3 stehen. Usw...

(Ich muss dies noch in eine Baumstruktur packen, um mit denen vernünftig zu rechnen, aber eins nachm anderen ;) Erstmal würde ich gerne die Tabelle sehen mit den Werten)

Verfasst: 10. März 2011 06:32
von Christian81
QString hat midnestens 4 verschiedene Möglichkeiten einen Integer in einen String zu wandeln - such Dir eine aus.

Verfasst: 13. April 2011 15:57
von huckleberry
Habe es nun so gelöst.

Code: Alles auswählen

       newItem = new QTableWidgetItem( tr("%1").arg(tmpDN->getNthNumber(i)) );