我正在尝试制作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
答案 0 :(得分: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将相关位提取到数字中,但这应该处理字节序问题