Hallo Ihr,
ich möchte zur Simulation eines Bit-Stroms eine Bit-Liste erstellen und in ihr bestimmten Positionen den Wert 0 oder 1 zuweisen. Was nicht funktioniert ist beispielsweise folgendes:
data = [0x0] * 3 # Bitfeld der Länge 24
# Versuch, ein Bit zu setzen:
data[3] = True oder data[3] = 0b1 funktioniert nicht
Wie muss ich hier vorgehen ?
maksimilian
Zuweisung von Bits
Entweder willst du mit Bits arbeiten, dann nimm eine Ganzzahl und den shift-Operator <<, oder du willst "simulieren", dann benutz eine Liste mit 24 bools. Dein Mischmasch ist nur unnoetig kompliziert.
oder
Code: Alles auswählen
>>> a = 0
>>> a |= 1 << 13
>>> a
8192
Code: Alles auswählen
>>> a = [False] * 24
>>> a[13] = True
>>> a
[False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False]
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@maksimilian: Was heisst „funktioniert nicht“? Ich sehe da ohne es auszuführen einen sehr offensichtlichen `IndexError`. Falls *der* Dich überrascht, dann verrate mal wie die Liste aussieht und welcher Wert an welchem Index zu finden ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 86
- Registriert: Freitag 2. November 2018, 20:59
@ deets, blackjack
Ihr seht ja aus meiner Frage, dass ich mit den Datentypen in Python noch nicht so vertraut bin und bin dankbar für Eure (nachsichtigen) Antworten. Damit der Hintergrund meiner Problematik klar wird: ich teste zur Zeit den Anschluss einer Bosche Wägezelle an einen AD-Wandler HX711. Dessen Ausgabe soll für den Test meiner Programmierung simuliert werden. In diesem Zusammenhang möchte ich erst einmal das Bithandling in Python verstehen und muss darüber weiter nachdenken, bevor ich weitere Fragen stelle.
maksimilian
Ihr seht ja aus meiner Frage, dass ich mit den Datentypen in Python noch nicht so vertraut bin und bin dankbar für Eure (nachsichtigen) Antworten. Damit der Hintergrund meiner Problematik klar wird: ich teste zur Zeit den Anschluss einer Bosche Wägezelle an einen AD-Wandler HX711. Dessen Ausgabe soll für den Test meiner Programmierung simuliert werden. In diesem Zusammenhang möchte ich erst einmal das Bithandling in Python verstehen und muss darüber weiter nachdenken, bevor ich weitere Fragen stelle.
maksimilian
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@maksimilian: Bit-Operationen in Python sind eigentlich die gleichen wie in C (oder Java, oder andere ähnliche Sprachen), nur das ganze Zahlen keine Begrenzung auf eine bestimmte Bitanzahl haben, sondern im Grunde in der Grösse nur durch den zur Verfügung stehenden Speicher begrenzt sind.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Wenn am Ende eine "echte" Kommunikation steht, dann solltest du eben nicht mit Listen, sondern eben mit Ganzzahlen und den entsprechenden Bit-Operationen arbeiten, wie von mir gezeigt.maksimilian hat geschrieben: ↑Donnerstag 15. November 2018, 13:11 Ihr seht ja aus meiner Frage, dass ich mit den Datentypen in Python noch nicht so vertraut bin und bin dankbar für Eure (nachsichtigen) Antworten. Damit der Hintergrund meiner Problematik klar wird: ich teste zur Zeit den Anschluss einer Bosche Wägezelle an einen AD-Wandler HX711. Dessen Ausgabe soll für den Test meiner Programmierung simuliert werden. In diesem Zusammenhang möchte ich erst einmal das Bithandling in Python verstehen und muss darüber weiter nachdenken, bevor ich weitere Fragen stelle.