J'ai besoin de calculer les 2 octets les moins significatifs de la somme de contrôle d'un message (en octets) reçu d'un module Iridium (Short Burst Data).Somme de contrôle de 2 octets en python pour l'iridium SBD
Le code que j'utilise fonctionne dans la plupart des cas, mais pas dans l'exemple ci-dessous.
mon code est:
z=b"AT+SBDRB\r\x00\x18this is a random message\x08\xdb"#message received from Iridium module
msg=z[11:-2]
print(msg)
checksum_received = z[-2:]
checksum = 0
check_it = False
for c in msg:
checksum = checksum + C#msg is a byte type
a=chr(checksum >> 8)
b=chr(checksum & 0xFF)
c=a.encode()
d=b.encode()
checksum = c + d
print(c.hex())
print(d.hex())
print(checksum.hex())
print(checksum_received.hex())
print(checksum == checksum_received)
Dans le cas ci-dessus la somme de contrôle est différent de la somme de contrôle que je reçois (j'ai essayé d'envoyer le message à plusieurs reprises pour assurer que je ne en effet obtenir une erreur de trasmission).
J'ai testé le code avec les messages et les deux checksums suivants sont les mêmes:
z=b"AT+SBDRB\r\x00\x05hello\x02\x14"
z=b"AT+SBDRB\r\x00\x14thisisarandommessage\x08["
z=b"AT+SBDRB\r\x00\x15this isarandommessage\x08{"
Les seules informations données dans le manuel Iridium SBDS est:
La somme de contrôle est le moins significatif 2 -bytes de la sommation du message SBD complet . L'octet de poids fort doit être envoyé en premier. Par exemple si la FA envoie le mot « bonjour » codé en ASCII à l'ISU le flux binaire serait hex 68 65 6c 6c 6f 02 14.