我想到的是使用1s和0s的字符串,连接它或做任何需要的事情,然后使用int(string,2)和struct.pack。是否还有其他方法可以处理二进制数据而无需将其转换为Python字符串? Egg:我有一个16位二进制字符串,我必须随意切换每个字符串的统计数据,我该怎么做?
干杯,
答案 0 :(得分:0)
听起来你想要的是bitarray
。通过字符串进行从根本上说是错误的方式,即使它很容易。这是stringly typing的一个例子,它是强类型的颠覆(因此很糟糕):字符不是位。字符串是位字符串的适当可视人类表示,但它不应该是实际机器表示。
答案 1 :(得分:0)
您可能需要查看bitstring模块(文档here),该模块旨在使这类内容变得简单,同时仍将数据存储为打包位。
您可以使用标准Python表示法查询/设置位,并使用属性将其简单地转换为int或原始字节。
答案 2 :(得分:0)
如果你想要一些轻量级的东西,那么你需要创建自己的类(没有内置任何东西)。例如:
class BitArray(object):
def __init__(self, array):
"""Takes a bytearray object storing the bit data"""
self.array = array
def setbit(self, pos, value):
byte, bit = divmod(pos, 8)
if value:
self.array[byte] |= (128 >> bit)
else:
self.array[byte] &= ~(128 >> bit)
这是基本的。然后,您可以从普通的bytearray
创建您的比特阵列,操纵这些比特,然后根据需要将其取回。
a = BitArray(bytearray([0, 0])) # two zero bytes (16 zero bits)
a.setbit(3, 1) # set bit 3 to 1
print(list(a.array))