python如何在整数列表和字符串之间进行转换?

时间:2016-04-23 01:34:23

标签: python bit-manipulation

我有一个整数列表,每个整数的范围是[0,255]。我想把它转换成一串比特。每个整数使用8位来表示。在我处理了一串位之后,我想把它转换成一个整数列表,每8位到一个整数。怎么做?

2 个答案:

答案 0 :(得分:1)

您不需要外部图书馆。使用python的内置函数。

整数到二进制:

i = 100
print "{0:08b}".format(i)

二进制到整数:

b = "01100100"
print int(b, 2)

如果你需要构建一个大型数组,那么使用bitarray模块就好了,就像你在答案中所做的那样:

bits = bitarray()
for i in pixels: bits.extend("{0:08b}".format(i))

答案 1 :(得分:0)

我得到了答案。这是我的答案:

from PIL import Image
from bitarray import bitarray
from bitstring import BitArray


class Compress:
    def readFile(self, filename):
        self.img = Image.open(filename)
        self.pixels = list(self.img.getdata())  # a list of int--[0,255]

    def __toBitArray__(self):
        self.bits = bitarray()
        for i in self.pixels:
            self.bits.extend(BitArray(uint=i, length=8).bin)
        print(self.bits.length())

    def saveFile(self, filename):
        p = []
        for i in range(self.bits.length()//8):
            b = self.bits[i*8:i*8+8].to01()
        p.append(BitArray(bin=b).uint)
        self.img.putdata(p)
        self.img.save(filename)
        self.img.close()


if __name__ == '__main__':
    c = Compress()
    c.readFile('num.bmp')
    c.__toBitArray__()
    c.saveFile('test.bmp')