QByteArray in int umwandeln



  • Hallo,

    ich habe ein Problem, bei welchem ich einen kleinen Denkanstoß gebrauchen könnte.

    Folgende Sachlage:

    Innerhalb eines Python - Scriptes, welches einen bestimmten Algorithmus enthält, wird über einen Hash ein Integer - Wert generiert. Das Script nutzt hierbei die Python - Funktion
    int(hash.hexdigest(), 16).

    Beispiel:
    Hash: 5ff8549207500f7d92eef9a480f0cab1d95ffe8b787c2602a5ae67f68bd61c64
    daraus generierter int:
    43408482371090811045691511632062265926146264181189158529056014562039361313892

    Wie man sieht ist der generierte Int - Wert ziemlich groß.

    Durch die technischen Gegebenheiten muss dieses Script jetzt nach C++ unter Verwendung von Qt portiert werden. Und hier
    liegt auch das Problem:

    Der Hash wird in Qt in einem QByteArray abgelegt. Ich habe nun bereits versucht mit einem QDataStream (Stackoverflow) die Umwandlung durchzuführen, allerdings stimmen die Ergebnisse hier nicht überein. Ich bin also erst einmal davon ausgegangen dass die entstehenden Werte hier einfach zu groß werden.

    Hat jemand schon einmal ein ähnliches Problem gelöst und könnte mich in die entsprechende Richtung schubsen?

    Schon mal Danke fürs Lesen.

    edith: Da hatte mich beim Erstellen das "neue" Boardinterface dranbekommen 😉



  • ??

    Und du musstest jetzt vorher erst mal diesen Mist posten?



  • Schau dir mal QByteArray::at an.



  • Dann bräuchtest du einen Ganzzahl-Datentyp mit mindestens 32 Bytes (bzw. 256 Bits), da der gezeigte Hash 64 Hexadezimalziffern hat. Da käme dann wohl nur eine BigInt-Implementation in Frage (aber auch diese verwendet intern meist einen String bzw. Byte-Array).
    Wofür brauchst du denn diesen Integer-Wert (also warum reicht der Hash selbst nicht aus)?



  • @Th69 sagte in QByteArray in int umwandeln:

    Wofür brauchst du denn diesen Integer-Wert (also warum reicht der Hash selbst nicht aus)?

    Das ist auch die Frage die sich mir als erstes stellt. Eventuell gibt es ja Alternativen, die besser sind als mit BigInts rumzuwurtschteln.



  • Wenn der Hash immer 64 Zeichen lang ist, würde sich auch boost::multiprecision mit 256 Bit anbieten (uint256_t). Und dann ganz normal konvertieren.



  • Hallo,

    danke schon mal für die Antworten. Nach weiteren Recherchen wird es wohl wirklich auf eine BigInt - Implementierung
    herauslaufen.

    Was den Int an sich angeht ist es in der Implementierung so dass ein Teil diese Integers für weitere Berechnungen "herausgeschnitten"
    wird. Dieser Teil wird dann an andere Funktionen weitergereicht. Warum die Implementierung so gewählt wurde kann ich nicht sagen.
    Mir ist das auch seltsam vorgekommen, vor allem da sich der Hash hier eigentlich, wie @Th69 geschrieben hat, meiner Meinung nach
    auch in dieser Form benutzen lassen müsste.


Log in to reply