Bitverschiebung funktioniert nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
may24x
User
Beiträge: 48
Registriert: Montag 2. September 2013, 06:44

Hi zusammen,

Ich lade Hex-Code in eine Variable und will diese (zunächst) ganz simpel vier (binär) Stellen nach links schieben ...

Code: Alles auswählen

inBytes = b'\x00\x3e\xb0\x00\x05\xdc\x00\x80'

delimiter = inBytes[7]
fps = inBytes[3:6]
fps >> 4


Warum geht das nicht ?!

Code: Alles auswählen

Traceback (most recent call last):
  File "Q:\python\golomb-converter.py", line 12, in <module>
    fps >> 4
TypeError: unsupported operand type(s) for >>: 'bytes' and 'int'
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@exidio: mit Bytes kann man nicht Bitverschieben. Wie soll denn ein halbes Byte aussehen? Wandle das in ein int um.
may24x
User
Beiträge: 48
Registriert: Montag 2. September 2013, 06:44

Was ? :shock: ... und wie soll ein halbes INT dann aussehen ?

Nun die Bits sollen sich innerhalb des Bytes ... bzw. hier ist's ja quasi ein Array aus 4 Bytes ... bewegen.
In meinem Fall nach rechts um vier Positionen
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast schon recht, dass konzeptionell die Shift-Operation auch auf Bytesstrings genauso funktionieren wuerde wie auf Integern. Allerdings gibts da durchaus noch ein paar Feinheiten: ein Shift auf einem Bytestring macht ploetzlich die Frage nach der Endianess auf: wenn du nach links verschiebst, ist dann das Byte mit dem niedrigsten Index das Byte mit der geringsten Wertigkeit, oder das mit dem groessten Index?

Und so oder so geht's halt nicht, hilft ja alles jammern nicht. Wenn du 4 Bytes hast, musst du die eben zB mit dem struct-Module oder der from_bytes-Methode auf int konvertieren, dann shiften, dann zurueck-konvertieren und in den String einfuegen (wenn das das Endziel ist).
Antworten