2017-07-05 4 views
0

Je reçois des données du port série. Ce ne sont pas des données ASCII (comme de putty), mais des données hexadécimales de la ligne modbus rtu (par exemple 0103AABBCCDD816E sur la ligne, où 01 est un octet en hexadécimal brut, 03 est un autre octet en hexadécimal brut ... etc)Affichage des données hexadécimales du port série dans la fonction d'impression

J'utilise python 3.6

Je dois imprimer simplement 0103AABBCCDD816E

J'ai essayé ce code:

rx_raw = ser.read(8) 
rx=binascii.hexlify(bytearray(rx_raw)) 
print("raw: ") 
print(rx_raw) # gives: b'\x01\x03\xaa\xbb\xcc\xdd\x81n' 
print("\n") 
print("hexiflied: ") 
print(rx)  # gives: b'0103aabbccdd816e' 

binascii.hexlify(bytearray(rx_raw)) est presque ce que je dois, mais je dois me débarrasser de b' '.

Répondre

0

Si vous voulez convertir une chaîne binaire en une chaîne normale, vous devez le décoder:

b = b'0103aabbccdd816e' 
s = b.decode('ascii') 

print(b, s, s.upper()) 
# b'0103aabbccdd816e' 0103aabbccdd816e 0103AABBCCDD816E 

De l'docs:

bytes.decode (encoding = "utf-8" , erreurs = "stricte")
bytearray.decode (encoding = "utf-8", erreurs = "strictes")

Retourne une chaîne de décodés e Les octets donnés. L'encodage par défaut est 'utf-8'. des erreurs peuvent être données pour définir un schéma de traitement des erreurs différent. La valeur par défaut pour les erreurs est 'strict', ce qui signifie que les erreurs de codage provoquent une erreur UnicodeError. Les autres valeurs possibles sont 'ignore', 'replace' et tout autre nom enregistré via codecs.register_error(), voir la section Gestion des erreurs. Pour une liste des codages possibles, reportez-vous à la section Encodages standard.

+0

Merci beaucoup, Mike. Fonctionne parfaitement! :) Passez une bonne journée! – denderdale