Seite 1 von 1

Dezimale Zahl (0-255) zu 8 booleschen Werten

Verfasst: Montag 23. Januar 2012, 11:47
von senden9
Hallo.
ich ich lasse einen Mikrocontroller mit einem Server mit Django kommunizieren. Der Mikrocontroller sendet mir eine Zahl zwischen 0 - 255 zurück. Diese Zahl stellt 8 Eingänge dar.
Z.B ist 12 => Eingang 1 High / Eingang 2 High / Eingang 3 Low / Eingang 4 Low / Eingang 5 Low / Eingang 6 Low / Eingang 7 Low / Eingang 8 Low. Also in binärer Schreibweise. Wie finde ich in Python heraus welcher Pin High/Low ist? Ich möchte also eine dezimale Zahl zu 8 booleschen Werten umwandeln.

MfG
senden9

Re: Dezimale Zahl (0-255) zu 8 booleschen Werten

Verfasst: Montag 23. Januar 2012, 12:00
von deets

Code: Alles auswählen


portwert = 8
stelle = 3 # 0-7
if (1 << stelle) & portwert:
    print "stelle ", stelle, " gesetzt"

Mit nem huebschen Schleifchen drum rum kannst du das ganze natuerlich auch zu einer Liste von 0/1 machen.

Re: Dezimale Zahl (0-255) zu 8 booleschen Werten

Verfasst: Montag 23. Januar 2012, 12:26
von jerch
@senden9:
Wenn
senden9 hat geschrieben:Z.B ist 12 => Eingang 1 High / Eingang 2 High / Eingang 3 Low / Eingang 4 Low / Eingang 5 Low / Eingang 6 Low / Eingang 7 Low / Eingang 8 Low
das stimmt, sind allerdings die Eingänge vertauscht und Du müsstest das zusätzlich behandeln.

Re: Dezimale Zahl (0-255) zu 8 booleschen Werten

Verfasst: Montag 23. Januar 2012, 12:38
von senden9
jerch hat geschrieben:@senden9:
Wenn
senden9 hat geschrieben:Z.B ist 12 => Eingang 1 High / Eingang 2 High / Eingang 3 Low / Eingang 4 Low / Eingang 5 Low / Eingang 6 Low / Eingang 7 Low / Eingang 8 Low
das stimmt, sind allerdings die Eingänge vertauscht und Du müsstest das zusätzlich behandeln.
Sorry das war ein Denkfehler und stimmt so nicht. Die Reihenfolge ist anders.

Der obrige Code funktioniert übrigens hervorragend. Danke!

Re: Dezimale Zahl (0-255) zu 8 booleschen Werten

Verfasst: Montag 23. Januar 2012, 12:49
von Barabbas
senden9 hat geschrieben: Sorry das war ein Denkfehler und stimmt so nicht. Die Reihenfolge ist anders.
Und ich wundere mich, dass die Ergebnisse nicht passen. Sowas liebe ich ja… :evil:

Re: Dezimale Zahl (0-255) zu 8 booleschen Werten

Verfasst: Montag 23. Januar 2012, 12:54
von jerch
Wenn Du eh immer mit der Liste der Eingänge arbeitest, kannst Du das nutzen:

Code: Alles auswählen

>>> def int_to_bitlist(num, bits):
...   return [num>>n & 1 for n in xrange(bits)][::-1]
... 
>>> int_to_bitlist(12, 8)
[0, 0, 0, 0, 1, 1, 0, 0]
bzw. ohne [::-1], dann steht `int_to_bitlist(12, 8 )[n-1]` für das n-te Bit. Das [::-1] hab ich nur eingefügt, da wir höherwertige Stellen bei der Ausgabe normalerweise links vermuten ;)

Re: Dezimale Zahl (0-255) zu 8 booleschen Werten

Verfasst: Dienstag 24. Januar 2012, 16:31
von Lenzer
Danke für die interessanten Beiträge :) Habe ich mich selber auch mal gefragt..

Re: Dezimale Zahl (0-255) zu 8 booleschen Werten

Verfasst: Dienstag 24. Januar 2012, 17:34
von senden9
Danke. ich hab mich jetzt für eine leicht abgewandelte vorm von jerch entschieden.
PS: Muss ich in diesem Forum irgendwo auf "Gelöst" oder so was drücken?

Re: Dezimale Zahl (0-255) zu 8 booleschen Werten

Verfasst: Dienstag 24. Januar 2012, 18:31
von /me
senden9 hat geschrieben:PS: Muss ich in diesem Forum irgendwo auf "Gelöst" oder so was drücken?
Nein. Spätestens wenn jemand einen Bug fände, der Freitags nachts um 23:42 bei Neumond unter Umständen Schwierigkeiten mit dem Code machen könnte wenn die Quadratwurzel des Unix-Sekundenzählers eine Primzahl ist, dann würde alsbald ein Geschrei anheben, dass das "Gelöst"-Flag weg muss. Deshalb führen wir das hier erst gar nicht ein.