2

私はしばらくの間、これに関していくつかの本当の問題を抱えています。Pythonでバイナリデータの文字列を受信して​​いますが、データの5ビットサブセット(バイト全体ではない)のみを解凍して解釈するのに問題があります。頭に浮かぶ方法は、単に惨めに失敗するだけのようです。

2バイトのパックされたバイナリデータがあり、16内の最初の10ビットを解釈したいとします。これをそれぞれ5ビットを表す2つの整数に変換するにはどうすればよいですか?

4

1 に答える 1

3

ビットマスクとビットシフトを使用します。

>>> example = 0x1234   # Hexadecimal example; 2 bytes, 4660 decimal.
>>> bin(example)       # Show as binary digits
'0b1001000110100'
>>> example & 31       # Grab 5 most significant bits
20
>>> bin(example & 31)  # Same, now represented as binary digits
'0b10100'
>>> (example >> 5) & 31 # Grab the next 5 bits (shift right 5 times first)
17
>>> bin(example >> 5 & 31)
'0b10001'

ここでの秘訣は、31が5ビットのビットマスクであることを知ることです。

>>> bin(31)
'0b11111'
>>> 0b11111
31
>>> example & 0b11111
20

0bご覧のとおり、操作が簡単な場合は、2進数のリテラル表記を使用することもできます。

背景情報の詳細については、ビット操作に関するPythonWikiを参照してください。

于 2012-06-18T14:52:38.707 に答える