如何在python中将bitarray转换为整数

时间:2017-02-26 03:47:44

标签: python bit-manipulation bitarray

假设我使用以下代码在python中定义了一些bitarray:

d&(d+1)

如何将d转换为整数表示? 此外,如何使用bitarrays执行android:gravity="top"等操作?

5 个答案:

答案 0 :(得分:6)

要将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

答案 1 :(得分:3)

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

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

print i

输出:16777216。

答案 2 :(得分:3)

我通常使用的一种更简单的方法是

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

代码方面,这可能效率不高,因为它将位数组转换为字符串然后返回到int,但它更简洁,因此在较短的脚本中可能更好。

答案 3 :(得分:1)

Bitarray 1.2.0添加了一个实用程序模块bitarray.util,其中包括一个将位数组转换为整数,反之亦然的函数。这些函数称为int2baba2int。有关详细信息,请参见此处: https://github.com/ilanschnell/bitarray

答案 4 :(得分:0)

正如 Ilan Schnell 指出的,在 ba2int() 模块中有一个 bitarray.util 方法。

>>> 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)