[英]How to convert bitarray to an integer in python
假設我使用以下代碼在 python 中定義了一些位數組:
from bitarray import bitarray
d=bitarray('0'*30)
d[5]=1
如何將 d 轉換為其 integer 表示形式? 此外,如何使用位數組執行諸如d&(d+1)
之類的操作?
要將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))
在代碼方面,這可能不是那么有效,因為它將位數組轉換為字符串,然后再轉換回 int,但它更簡潔易讀,因此在較短的腳本中可能會更好。
Bitarray 1.2.0 添加了一個實用程序模塊bitarray.util
,其中包括將位數組轉換為整數的函數,反之亦然。 這些函數稱為int2ba
和ba2int
。 請在此處查看詳細信息: https : //github.com/ilanschnell/bitarray
正如Ilan Schnell指出的那樣,在bitarray.util
模塊中有一個ba2int()
方法。
>>> from bitarray import bitarray
>>> from bitarray.util import ba2int
>>> d = bitarray('0' * 30)
>>> d[5] = 1
>>> d
bitarray('000001000000000000000000000000')
>>> ba2int(d)
16777216
從同一個模塊有一個zeros()
方法將前三行更改為
>>> from bitarray import bitarray
>>> from bitarray.util import ba2int, zeros
>>> d = zeros(30)
您可以使用int
:
>>> int(d.to01(), base=2)
>>> 16777216
bitarray.to01
方法從位數組生成一個位串,然后int(<bit string>, base=2)
將其轉換為十進制數 integer。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.