2017-04-24 6 views
1

は、私は次のコードをしている:なぜ私のBitArrayは分割されますか?

bittrans = '0b' + str(bitnumber) 
strnumber = bitstring.BitArray(bittrans) 
print bittrans 
print strnumber 

出力:

0b1001010100000010111110001111111111 
0x9502f8ff, 0b11 

はどのようにしてビット列のフォーム分割自体を停止していますか?

+0

私はサイズが私は問題 –

+0

'bittrans'が文字列でなくて、それを他のビット列を追加することができ、大きなしかし、後にコードでのだと思いますが、 'strnumber'は' BitArray'オブジェクトです。文字列 'print'は文字列を明示的に出力しますが、オブジェクトを' print'することはオブジェクトが最初に文字列に変換される必要があることを意味します。この場合、['BitArray'はいくつかの面白いことをしようとします](https://github.com/scott-griffiths/bitstring/blob/master/bitstring.py#L931-L956)。 – Blender

答えて

0

BitArrayは、printビット配列を見て簡単にビット配列を作成するために使用する文字列表現です。それは内部表現とは関係がありません。

BitArray.__str__がそうのように、バイトの束としてあなたbitarrayを表現したいので、それは分割:

0x95 02 f8 ff ? 

あなたのビット列のビット数ではないので、明確バイトとしてあなたのビット列を表すことができません8の倍数:

In [60]: len('1001010100000010111110001111111111') % 8 
Out[60]: 2 

あなたの質問には文字列表現に残っているビット数があります。あなたは "単"の16進数として表現可能にするために、あなたの数字を6ビット以上埋めなければなりません。

あなたが代わりにstrnumber.binをプリントアウトすることができます:

In [75]: print strnumber.bin 
1001010100000010111110001111111111 
+0

説明のためにありがとうございますが、strnumber.binをBitarrayに追加したい場合、ValueErrorをスローします:トークンには値がありません –

+0

@OberonMeier:私が何を言おうとしているのか分かりません。 'print strnumber'と' strnumber.bin'を呼び出すだけで 'strnumber'のテキスト表現ができます。 'strnumber'を文字列に変換して作業する必要はありません。これは、' BitArray'オブジェクトを持つ点全体を打ち消すものです。あなたは 'bitarray_object_a.append(bitarray_object_b)' – Blender

関連する問題