我有4个字节的二进制数据(大端序),需要解包。如果它包含了两个2字节无符号整数值,那么这将是很简单的:
a, b = data.unpack("C>C>")
但是如果数据包含一个3字节的值(a
),后面跟着一个1字节的值(b
)呢?unpack方法似乎不能处理除8、16、32和64位整数格式以外的其他格式。这是我想出来的:
a, b = data.unpack("L>XC") # "L>": unpack a 32-bit unsigned int (big-endian)
# "X": rewind (skip back) one byte
# "C": unpack an 8-bit unsigned int
a >>= 8 # drop the last (lowest) byte from a
如果数据采用小端编码,可以使用
a&=0xFFFFFF
来丢弃最后(最高)一个字节。是否有更加优雅的方法来解包这些值?