2016-04-23 6 views
0

私は範囲の[0,255]の整数のリストを持っています。これを一連のビットに変換したいと思います。各整数は8ビットを使用して表します。文字列を扱った後、8ビットごとに整数のリストに変換したい。どうやってするの?pythonどのように整数のリストとビットの文字列の間で転送するには?

+0

あなたの試行の[mcve]を表示し、問題を説明してください。 – idjaw

+0

」%で使用するには、['b'"プレゼンテーションタイプ "](https://docs.python.org/2/library/string.html#format-string-syntax) () 'と' int'関数の第2の形式](https://docs.python.org/2/library/functions.html#int)を受け入れます'base'引数です。 – jedwards

答えて

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)) 
+0

申し訳ありませんが、私は明確に私の質問を説明しません。ビットに変換した後、私はそれらを操作します。表現する文字列を使用する場合、それはすべての私の記憶を消費します。 –

+0

python intはすべて4bytesではないので、ビットオフセットを使用してビットを処理することはできません。C言語を使用しているものが好きです。 –

+0

あなたはあなたの答えで 'bitarray'を利用することができます。私は私の答えを編集しました。 –

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') 
関連する問題