2017-10-06 2 views
1

Je suis en train de convertir cet hexagone à la bonne INT32 Big Endian qui serait:Hex à int32 Big Endian

ffd7c477 --> -2636681 

J'ai vérifié comment il devrait ressembler ici:

http://www.scadacore.com/tools/programming-calculators/online-hex-converter/

I Je ne sais pas comment le convertir. C'est là la latitude est

payload = "1901000a03010aff01ff01300a01ffd7c4750016c0540322ed" 
latitude = payload[28:36] = ffd7c477 

Ici, je reçois la mauvaise valeur non signée:

int(binary[28:36], 16) 

Répondre

1

Cela a fonctionné struct.unpack('>i', "ffd7c477".decode('hex'))

+0

Nice. Je trouve qu'il est plus facile de convertir les types dans Ruby en premier '' ["ffd7c477"]. Pack ('H *'). Unpack ('l>') '. Eh bien, pas besoin de le porter sur Python maintenant. –

0

Depuis Python utilisera le ByteOrder de votre architecture de processeur par défaut pour gérer les numéros (vous pouvez vérifier vos systèmes byteorder avec sys.byteorder), vous devrez spécifier explicitement que vous voulez traiter la valeur donnée comme big endian. Le module struct vous permettra de le faire:

import struct, codecs 
val = "ffd7c477" 
struct.unpack("!i", codecs.decode(val, "hex")) 

Le premier argument de unpack: ! signifie pour traiter les octets comme grand-boutiste, i signifie pour traiter les octets en tant que valeurs int32.