Python中的小端位序
我正在尝试制作一个GIF分析器,但在读取任意数量的位作为小端整数时遇到了问题。使用结构体(Struct)处理字节大小的参数还不错,但有些GIF结构是3位的小端无符号整数(特别是在GIF头部,http://www.onicos.com/staff/iz/formats/gif.html)。请问有什么好的方法来反转这些数字吗?
我尝试过用结构体反转整个字节的字节序,但它似乎不想反转:
struct.unpack('<'+str(len(string))+'s',string)[0] //does not actually invert
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
把相关的位提取成一个数字,但这个方法应该可以解决字节序的问题。