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: 47
Registriert: Montag 2. September 2013, 06:44

Mittwoch 7. Februar 2018, 11:29

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: 8108
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 7. Februar 2018, 11:36

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

Mittwoch 7. Februar 2018, 12:09

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: 3110
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 7. Februar 2018, 12:24

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