将十六进制解码为坐标

时间:2017-08-29 14:36:39

标签: python hex endianness

我有一个十六进制负载:

872fa5596122f23e24efb4fc1013b7000000000718

lat和lng是小端,位于以下位置:

lng - binary[20:28]
lat - binary[28:32]

我不确定如何获得正确的结果。我想首先我必须将十六进制改为小端?然后将其转换为int?我试过这个:

data = struct.unpack('<ll',binary[12:20])

输出:

TypeError: a bytes-like object is required, not 'str'

1 个答案:

答案 0 :(得分:0)

首先需要将十六进制表示转换为字节对象:

import codecs

binary = "872fa5596122f23e24efb4fc1013b7000000000718"
binary_bytes = codecs.decode(binary, 'hex')
print(binary_bytes)
# b'\x87/\xa5Ya"\xf2>$...

然后你可以使用struct解码为整数或其他:

import struct
# Guessed the offsets...
lng, lat = struct.unpack('<ll', binary_bytes[0:4] + binary_bytes[20:24])
print((lng, lat))
# (15003997831, 1056055905)