/ / little endian bitów w python - python, struct, endianness

trochę bitów endianowych w pythonie - python, struct, endianness

Próbuję zrobić analizator GIF, ja mamproblemy z odczytywaniem dowolnej liczby bitów jako liczby całkowitej w małym endianie. Struktury są ładne dla argumentów wielkości bajtów, ale niektóre struktury GIF to 3-bitowe małe całkowite liczby całkowite bez znaku (w szczególności w nagłówku GIF, http://www.onicos.com/staff/iz/formats/gif.html). jaki jest najlepszy sposób na odwrócenie tych liczb?

Próbowałem odwrócić endianness cały bajt / s z Struct, ale nie chce odwrócić:

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

Odpowiedzi:

1 dla odpowiedzi № 1

Nie wiem, czy możesz tego użyć struct do pracy nad rzeczami, które są mniej niżbajt wielkości. Ale jeśli nie martwisz się zbytnio szybkością, możesz wypróbować tę funkcję, która wymaga odwrócenia liczby i rozmiaru w bitach i zwraca odwrotny wynik.

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

Użyj go tak:

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

Oczywiście nadal musisz wyodrębnić odpowiednie bity do liczby przy użyciu struct, ale powinno to zająć się problemem endianness