Hex nach Dezimal



  • Hallo,
    wie kann ich einen QString der ein Hex-Zahl darstellt in eine QString umwandeln, der das in Dezimal darstellt?
    Der Code unten funktioniert nicht richtig. Mit grossen Zahlen geht es nicht. Bei "BBBBBBBB" bekomme -69 -69 -69 -69 statt 187 187 187 187.

     QString h="BBBBBBBB";//; ->187 187 187 187  -69 -69 -69 -69
        QByteArray array{QByteArray::fromHex(h.toUtf8())};
        QString result="";
        for (int i=0; i<array.length(); i++)
        {
            result+=QString::number(array[i]);
            if (i!=array.length()-1)
            {
                result+=" ";
            }
        }
    


  • @asd1 Das ist ein Darstellungsproblem.

    Die Bitmuster für -69 und 187 sind identisch.
    Ein Byte ist vorzeichenbehaftet. Du must casten.



  •  QByteArray array{QByteArray::fromHex("BBBBBBBB")};
        for (int i=0; i<array.length(); i++)
        {
           array[i]=static_cast<quint8>(array[i]);
        }
    

    Klappt leider nicht. Auch nicht mit uchar. Kommt immer -69.



  • @asd1 sagte in Hex nach Dezimal:

    Ich nehme mal an, dass ich nach der Definition von array jedes Element des Array casten muss. Zu welchem Datentyp muss ich es casten? Habe es mit char versucht, aber ohne Erfolg.

    Ein char ist für Zeichen. Es ist System/Compiler/Einstrellungsabhängig ob das signed oder unsigned ist.
    Darum musst du explizit unsigned charangeben.

    PS. Oder (wegen Qt) quint8 oder uchar



  • @DirkB
    Ok. Habe es hinbekommen, habe es mit reinterpret_cast<const uchar *> hinbekommen.


Log in to reply