Seite 1 von 1

Bitverschiebung funktioniert nicht

Verfasst: Mittwoch 7. Februar 2018, 11:29
von may24x
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'

Re: Bitverschiebung funktioniert nicht

Verfasst: Mittwoch 7. Februar 2018, 11:36
von Sirius3
@exidio: mit Bytes kann man nicht Bitverschieben. Wie soll denn ein halbes Byte aussehen? Wandle das in ein int um.

Re: Bitverschiebung funktioniert nicht

Verfasst: Mittwoch 7. Februar 2018, 12:09
von may24x
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

Re: Bitverschiebung funktioniert nicht

Verfasst: Mittwoch 7. Februar 2018, 12:24
von __deets__
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).