Как преобразовать bitarray в целое число в python

предположим, я определил некоторые типа bitarray в Python, используя следующий код:

from bitarray import bitarray
d=bitarray('0'*30)
d[5]=1

Как преобразовать d в его целочисленное представление? Кроме того, как я могу выполнять такие манипуляции, как d&(d+1) С bitarrays?

3 ответов


преобразование bitarray для его целочисленной формы вы можете использовать struct модуль:

код:

from bitarray import bitarray
import struct

d = bitarray('0' * 30, endian='little')

d[5] = 1
print(struct.unpack("<L", d)[0])

d[6] = 1
print(struct.unpack("<L", d)[0])

выходы:

32
96

from bitarray import bitarray
d=bitarray('0'*30)
d[5]=1

i = 0
for bit in d:
    i = (i << 1) | bit

print i

выход: 16777216.


более простой подход, который я обычно использую-это

d=bitarray('0'*30)
d[5]=1
print(int(d.to01(),2))

Code wise это может быть не так эффективно, так как он преобразует битовый массив в строку, а затем обратно в int, но он гораздо более лаконичен для чтения, поэтому, вероятно, лучше в более коротких сценариях.