有没有正确的方法来创建一点一点的二进制字符串?

时间:2014-05-20 14:32:29

标签: python struct binary

我想到的是使用1s和0s的字符串,连接它或做任何需要的事情,然后使用int(string,2)和struct.pack。是否还有其他方法可以处理二进制数据而无需将其转换为Python字符串? Egg:我有一个16位二进制字符串,我必须随意切换每个字符串的统计数据,我该怎么做?

干杯,

3 个答案:

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