Bitweise boolesche Operationen auf bytes() in Python3 durchführen

English Deutsch

Bitweise Operationen auf bytes()-Instanzen in Python3.2+ sind einfach, aber nicht unmittelbar:

  1. Verwenden Sie int.from_bytes(...), um einen Integer zu erhalten, der das Byte-Array repräsentiert
  2. Führen Sie bitweise Operationen mit diesem Integer durch
  3. Verwenden Sie result.to_bytes(...), um den Integer zurück in ein bytes()-Array umzuwandeln

Beachten Sie, dass das Ergebnis nur Sinn ergibt, wenn Sie sicherstellen, dass beide bytes()-Instanzen dieselbe Länge haben.

Python-Code:

bitwise_bytes_utils.py
def bitwise_and_bytes(a, b):
    result_int = int.from_bytes(a, byteorder="big") & int.from_bytes(b, byteorder="big")
    return result_int.to_bytes(max(len(a), len(b)), byteorder="big")

def bitwise_or_bytes(a, b):
    result_int = int.from_bytes(a, byteorder="big") | int.from_bytes(b, byteorder="big")
    return result_int.to_bytes(max(len(a), len(b)), byteorder="big")

def bitwise_xor_bytes(a, b):
    result_int = int.from_bytes(a, byteorder="big") ^ int.from_bytes(b, byteorder="big")
    return result_int.to_bytes(max(len(a), len(b)), byteorder="big")

Beispielverwendung:

bitwise_bytes_example.py
a = bytes([0x00, 0x01, 0x02, 0x03])
b = bytes([0x03, 0x02, 0x01, 0xff])

print(bitwise_and_bytes(a, b)) # b'\x00\x00\x00\x03'
print(bitwise_or_bytes(a, b)) # b'\x03\x03\x03\xff'
print(bitwise_xor_bytes(a, b)) # b'\x03\x03\x03\xfc'

Check out similar posts by category: Python