簡體   English   中英

python如何在整數列表和位字符串之間傳遞?

[英]python how to transfer between a list of integers and string of bits?

我有一個整數列表,每個整數的范圍為[0,255]。 我想將其轉換為一串位。 每個整數使用8位表示。 處理完位字符串后,我想將其轉換為整數列表,每8位轉換為一個整數。 怎么做?

您不需要外部庫。 使用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))

我有答案。 這是我的答案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM