0

GIFアナライザーを作成しようとしています。リトルエンディアンの整数として任意の数のビットを読み取るのに問題があります。Structはバイトサイズの引数に適していますが、一部のGIF構造体は3ビットのリトルエンディアンの符号なし整数です(特にGIFヘッダー、http://www.onicos.com/staff/iz/formats/gif.html)。これらの数値を反転するための最良の方法は何ですか?

Structを使用してバイト全体のエンディアンを反転しようとしましたが、反転したくありません。

struct.unpack('<'+str(len(string))+'s',string)[0] //does not actually invert
4

1 に答える 1

1

structサイズが1バイト未満のものを処理するために使用できるかどうかはわかりません。ただし、速度についてあまり心配していない場合は、この機能を試すことができます。反転するには数値とビット単位のサイズが必要で、反転した結果が返されます。

def reverse(a,size):
    b = 0
    for i in range(size):
        b <<= 1
        b |= a >> i & 1
    return b

そのようにそれを使用してください:

>>> reverse(3,3) # 011 => 110
6
>>> invert(6,3) # 110 => 011
3
>>> invert(4,3) # 100 => 001
1
>>> invert(5,3) # 101 => 111
5
>>> 

明らかに、構造体を使用して関連するビットを数値に抽出する必要がありますが、これでエンディアンの問題を処理する必要があります

于 2013-02-25T00:30:06.680 に答える