Hexa Zahl spitten

  • GutenTag,


    wie kann man eine hexa Zahl spitten:



    a = 5000
    x = hex(a)
    print x
    0x1388


    nun möchte ich die hexa Zahl 0x1388 spilten das am Ende die Hexazahl 0x13 und 0x88 ensteht.


    Danke
    Raspo

  • Hallo,


    am flexibelsten wäre dann IMHO, wenn man per Modulo-Division die Ausgangszahl in die Hex-Faktoren zerlegt und dann die gewünscht Aufteilung daraus baut.


    Gruß, noisefloor

  • Moin,


    also in c++ würde das mittels Bitoperationen so aussehen
    long zahl = 5000;
    int x = ((zahl >> 8) & 0xFF );
    int y = (zahl & 0xFF);



    somit erhälst du mit x das Highbyte
    und mit y das Lowbyte


    greetz

    Programmierer und Bastler mit der Lizenz zum Löten...........

    Edited once, last by faloraspi ().

  • Wieviel Stellen kann denn die Dezimalzahl haben (von - bis)? Gibt es Beschränkungen bei den Stellen der Hexadezimalzahl? Wie groß sollen die Chunks sein? Immer 2 Stellen?


    [TOM]


    Gesendet von meinem HUAWEI RIO-L01 mit Tapatalk


  • Funktioniert in python genau so ;)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Du hast schon eine Idee wie Du ein Problem lösen kannst :thumbs1:


    Oftmals gibt es andere und auch einfachere Lösungen eines Problems. Schildere uns doch mal genau warum Du dieses Splitten der Hexrepräsentation deines Wertes haben möchtest.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • Funktioniert in python genau so ;)


    Hi dbv,
    das halte ich für ein Gerücht ... weil: obiges Beispiel auch nicht funktioniert.


    long ist definiert als 32 Bit Wert, mit int ist das so eine Sache. Da wäre uint16_t oder short besser ( -> click <- ).
    Da long eben 32 Bit ist, gibt es ein high-word und ein low-word. Aber die bekommst Du nicht durch rechtsshiften um 8 sondern um 16 Bit mit der Maske 0xFFFF (weil 16 Bit).
    Das bedeutet, dass das so aussehen muss (in C):

    Code
    ...
    long zahl;
    short x, y;
    
    
    zahl = 5000;
    x = ((zahl >> 16) & 0xFFFF );
    y = (zahl & 0xFFFF);
    ...


    cu,
    -ds-

  • Code
    >>> a = 5000
    >>> (a >> 8) & 0xFF
    19
    >>> (a & 0xFF)
    136
    >>> hex(a)
    '0x1388'


    Ich glaube das ist genau das er will, warum auch immer

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Edited once, last by dbv ().

  • Trotzdem ist es falsch ... wenn schon, dann müsste zahl statt long ein short (16 Bit) und damit das sauber ist, x und y vom Typ uint8_t sein.
    Das funktioniert nämlich nur deshalb, weil das high-word 0 ist, denn 5000 passt in das low-word.
    Das, was da gemacht wird ist lediglich das low-word in ein high- und ein low-byte unzuwandeln. Das high-word wird einfach unterschlagen.


    cu,
    -ds-

  • Da haste allerdings war. Asche aufmein Haupt. Aber die Datentypen kriegt man ja dank numpy auch in python abgebildet

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Edited once, last by dbv ().

  • Vielleicht sollte ich mein Problem nochmal besser erklären.
    Ich möchte eine decimal Zahl in low und hight Byte splitten und dann nach hexa umwandel.


    Die hexa Zahl als low und hight Byte , dann über den I2C Bus senden.

  • man könnte ja auch einen String draus machen und mittendurch schneiden

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)