2017-08-29 3 views
1

ich einen Hex-Nutzlast haben:Dekodierungs hex zu koordinieren

872fa5596122f23e24efb4fc1013b7000000000718 

Die lat und lng in Little-Endian und ist an folgenden Stellen:

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

Ich bin nicht sicher, wie die richtige zu bekommen Ergebnisse. Ich dachte zuerst würde ich den Hexen zu Little Endian ändern müssen? ? Dann konvertiert es in int Ich versuchte dies:

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

Ausgang:

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

Versuchen Sie die Binärdatei zuerst zu codieren: 'struct.unpack (' L3viathan

+0

Ah, ich wüsste nicht, arbeitet mit Python 2.7 – Harry

+0

Befolge ich die richtige Logik? Zuerst entpacke dann zu binär? – Harry

Antwort

0

Als erstes müssen Sie die hexdecimal Darstellung in eine Byte-Objekt konvertieren:

import codecs 

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

dann Sie können struct verwenden, um ganze Zahlen oder was auch immer zu dekodieren:

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

[bytes.fromhex] (https://docs.python.org/3/library/stdtypes.html#bytes.fromhex) –