try:
    return struct.unpack(fmt, data)
except struct.error:
    flen = struct.calcsize(fmt.replace('*', ''))
alen = len(data)
idx = fmt.find('*')
before_char = fmt[idx - 1]
n = (alen - flen) // struct.calcsize(before_char) + 1
fmt = ''.join((fmt[:idx - 1], str(n), before_char, fmt[idx + 1:]))
return struct.unpack(fmt, data)
data = open('data').read()
x = list(unpack('!HLbbs*', data))
x[-1] = binascii.hexlify(x[-1])
print(x)
Python: распаковать символы формата