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
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
Hexa Zahl spitten? Schau mal ob du hier fündig wirst!
Mir erschliesst sich der Sinn dahinter nicht.
Slicing Notation:
https://docs.python.org/2/tutorial/introduction.html#strings
Edit:
Wenn es eine fünfstellige Zahle ist?
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 >> & 0xFF );
int y = (zahl & 0xFF);
somit erhälst du mit x das Highbyte
und mit y das Lowbyte
greetz
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
Alles anzeigen
Moin,also in c++ würde das mittels Bitoperationen so aussehen
long zahl = 5000;
int x = ((zahl >> & 0xFF );
int y = (zahl & 0xFF);
somit erhälst du mit x das Highbyte
und mit y das Lowbytegreetz
Funktioniert in python genau so
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.
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):
cu,
-ds-
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
Macht ja nix ... alles halb so wild ... ist ja nun geklärt.
Das sind imho die typischen "Flüchtigkeits-Fehler" die sich mit wachsender Routine einschleichen.
bye,
-ds-
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.
Vielleicht solltest Du mal sagen, um welchen Datentypen es sich dabei handelt. Das ist eine essentielle Aussage, ohne die Du nicht weiterkommst.
cu,
-ds-
man könnte ja auch einen String draus machen und mittendurch schneiden
http://stackoverflow.com/questions/1503…cimal-in-python
oder das weiter unten verwendete Modul struct
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!