2011-06-21 13 views
3

は、私はちょうどpythonでbitarrayパッケージの使用を開始する、と整数からbitarrayは私に本当に混乱した結果を与える作るしようとしている:整数からのPythonビット配列の作成 - 奇妙な結果!

>>> import bitarray 
>>> bitarray.bitarray(5) 
bitarray('01000') 
>>> bitarray.bitarray(5) 
bitarray('00010') 
>>> bitarray.bitarray(5) 
bitarray('00100') 
>>> bitarray.bitarray(5) 
bitarray('00110') 

誰もこれが起きてしまう理由を任意のアイデアを持っています?

また、intからのビット配列を作成するにはどうすればよいでしょうか?これは動作しますが、文字列変換は、それを行うには奇妙な方法のように思える...

>>> bitarray.bitarray(bin(5)[2:]) 
bitarray('101') 

編集:私はint型からビット列を得るための簡単な方法を持っていた、bitstringに切り替えてしまった:

>>> bitstring.BitArray(uint=5,length=6) 
BitArray('0b000101') 

答えて

3

bitarray.bitarray(n)は、長さがnのの初期化されていないの配列を作成します。

整数から作成する限り、bitarrayはそれに特化しているようには見えないため、pack/unpackを使用するか、個々のビットをループして設定する必要があります。

+0

... Duh!なぜ私はそれについて考えなかったのか分かりません。それは明らかにそれが何をしているのかです。ありがとう! – weronika

+0

fromint()関数が存在しない理由は、 "integer"がPythonではあまり定義されていないからです。 long()とint()はどちらも整数型なので、どちらかをサポートする代わりに、.frombytes()のニュートラルインタフェースを好むように思われます。これは、他の基本型を扱うのはかなり簡単です。 – meawoppl