Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from pprint import pprint
- import struct
- # H - uint16 2
- # h - int16 2
- # I - uint32 4
- # i - int32 4
- # b - int8 1
- # B - uint8 1
- # q - int64 8
- # Q - uint64 8
- # f - float 4
- # c - char 1
- # d - double 8
- pointer = 4
- def structA(data):
- A = {}
- global pointer
- A['A1'] = struct.unpack('>H', data[pointer:pointer + 2])[0]
- pointer += 2
- # print(A['A1'])
- A['A2'] = []
- size = struct.unpack('>H', data[pointer:pointer + 2])[0]
- pointer += 2
- address = struct.unpack('>H', data[pointer:pointer + 2])[0]
- pointer += 2
- for i in range(size):
- b = struct.unpack('>I', data[address + i * 4:address + 4 + i * 4])[0]
- A['A2'].append(b)
- for i in range(size):
- A['A2'][i] = structB(data, A['A2'][i])
- address = struct.unpack('>H', data[pointer:pointer + 2])[0]
- pointer += 2
- A['A3'] = structC(data, address)
- A['A4'] = struct.unpack('>i', data[pointer:pointer + 4])[0]
- pointer += 4
- return A
- def structB(data, address):
- B = {}
- B['B1'] = struct.unpack('>b', data[address:address + 1])[0]
- address += 1
- B['B2'] = struct.unpack('>H', data[address:address + 2])[0]
- address += 2
- return B
- def structC(data, address):
- C = {}
- C['C1'] = []
- for i in range(4):
- C['C1'].append(structD(data, address))
- address += 1
- address += 8
- C['C2'] = struct.unpack('>b', data[address:address + 1])[0]
- address += 1
- address_2 = struct.unpack('>H', data[address:address + 2])[0]
- address += 2
- C['C3'] = structE(data, address_2)
- C['C4'] = struct.unpack('>d', data[address:address + 8])[0]
- address += 8
- address_3 = struct.unpack('>H', data[address:address + 2])[0]
- address += 2
- C['C5'] = structF(data, address_3)
- return C
- def structD(data, address):
- D = {}
- D['D1'] = struct.unpack('>B', data[address:address + 1])[0]
- address += 1
- D['D2'] = struct.unpack('>d', data[address:address + 8])[0]
- address += 8
- return D
- def structE(data, address):
- E = {}
- size = struct.unpack('>I', data[address:address + 4])[0]
- address += 4
- address_2 = struct.unpack('>I', data[address:address + 4])[0]
- address += 4
- E['E1'] = []
- for i in range(size):
- b = struct.unpack('>i', data[address_2 + i * 4:address_2 + i * 4 + 4])
- E['E1'].append(b[0])
- address_2 += 4 * size
- size = struct.unpack('>I', data[address:address + 4])[0]
- address += 4
- address_2 = struct.unpack('>H', data[address:address + 2])[0]
- address += 2
- E['E2'] = []
- for i in range(size):
- b = struct.unpack('>b', data[address_2 + i:address_2 + i + 1])
- E['E2'].append(b[0])
- E['E3'] = struct.unpack('>I', data[address:address + 4])[0]
- address += 4
- E['E4'] = struct.unpack('>i', data[address:address + 4])[0]
- address += 4
- return E
- def structF(data, address):
- F = {}
- F['F1'] = struct.unpack('>f', data[address:address + 4])[0]
- address += 4
- F['F2'] = struct.unpack('>f', data[address:address + 4])[0]
- address += 4
- F['F3'] = struct.unpack('>h', data[address:address + 2])[0]
- address += 2
- F['F4'] = []
- for i in range(5):
- F['F4'].append(struct.unpack('>B', data[address:address + 1])[0])
- address += 1
- return F
- # d = (b'YXXBI\xfa\x00\x02\x00\x16\x00]S#\xa0\xf1\xab/;\xbc\xaf\xe2\x00\x00'
- # b'\x00\x10\x00\x00\x00\x13\x03\x89\x92\xa0\xec\xb6\x86\x8aS\xba\xc2\xc4\xe35'
- # b'\xf9\x88\xbd\x9c\x07\xcd\xfeX\x1c1\xe1\xe1\x00\x00\x00\x06\x00\x00\x00\x1e'
- # b'\x00\x00\x00\x02\x006\xf1\x08?\x10s\xaa\x85W\xbe\xbe\xc4\xc4?3\xfb.\xac\x91'
- # b'\x93k)/\xcc\xfe?\xda5\xd1\x80\xc5\xc60\x8b?\xe9T\x1c\x11Xu\x04!\xbf\xcazw'
- # b'6\xe7\xb4\xf0H\xbf\xe6\xa0\xd5\xe6\xacRl\x19\x008\xbf\xe8\xd2\xa0\xf2n\xe5Z'
- # b'\x00N')
- def main(d):
- return structA(d)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement