0

我正在尝试制作一个 GIF 分析器;我在将任意数量的位读取为小端整数时遇到问题。Struct 非常适合字节大小的参数,但一些 GIF 结构是 3 位小端无符号整数(特别是在 GIF 标头中,http://www.onicos.com/staff/iz/formats/gif.html)。反转这些数字的最佳方法是什么?

我尝试使用 Struct 反转整个字节/s 的字节顺序,但它不想反转:

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

1 回答 1

1

我不知道您是否可以使用struct它来处理小于一个字节的内容。但如果你不太担心速度,你可以试试这个功能。它需要一个反转的数字和一个以位为单位的大小并返回反转的结果。

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
>>> 

显然,您仍然需要使用 struct 将相关位提取到一个数字中,但这应该解决字节顺序问题

于 2013-02-25T00:30:06.680 回答