如何将位数组转换为 python 中的整数
How to convert bitarray to an integer in python
假设我使用以下代码在 python 中定义了一些位数组:
from bitarray import bitarray
d=bitarray('0'*30)
d[5]=1
如何将 d 转换为其整数表示形式?
此外,如何使用位数组执行 d&(d+1)
等操作?
from bitarray import bitarray
d=bitarray('0'*30)
d[5]=1
i = 0
for bit in d:
i = (i << 1) | bit
print i
输出:16777216.
要将 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
我通常使用的一种更简单的方法是
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
正如 指出的那样,在 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)
假设我使用以下代码在 python 中定义了一些位数组:
from bitarray import bitarray
d=bitarray('0'*30)
d[5]=1
如何将 d 转换为其整数表示形式?
此外,如何使用位数组执行 d&(d+1)
等操作?
from bitarray import bitarray
d=bitarray('0'*30)
d[5]=1
i = 0
for bit in d:
i = (i << 1) | bit
print i
输出:16777216.
要将 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
我通常使用的一种更简单的方法是
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
正如 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)