簡體   English   中英

如何將位數組轉換為 python 中的 integer

[英]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 ,其中包括將位數組轉換為整數的函數,反之亦然。 這些函數稱為int2baba2int 請在此處查看詳細信息: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM