Bonjour,
Je suis en train de développer un programme pour communiquer avec un terminal via un port série. Le problème était que le terminal refusait systématiquement les données que je lui envoyais si je ne fournissais pas une série de caractère de controle à la fin des données. Ces caractères n'ont en fait rien a voir avec leur utilisation normal et sont simplément le résultat d'une opération mathématique. Je m'explique :
voici une suite de caractères traité comme une chaine :
22752254
et voici leur conversion hexa décimal sniffez par un soft de monitoring :
32 32 37 35 32 32 35 34 01 9D 0D
On notera que les 3 derniers sont des caractères calculés en fonction du reste et n'ont rien a voir avec ma chaine.
Pour ceux qui se demandent ce que j'essaye de faire : j'ai un programme fournit par le constructeur de mon terminal qui me permet
qui me permet d'échanger des données. J'essaye de reproduire son fonctionnement pour avoir un programme plus souple.
J'ai réussi a casser l'algo qui était derrière après de longues heures d'obervation (mon dimanche :( )
Donc si on additionne toutes les chiffres des unités on trouve
2+2+7+5+2+2+5+9 = 29. Si on divise par 16 on trouve 1 avec un reste de 15 soit le caractère F.
si maintenant on ajoute les chiffres des dizaines ajouté au dividende on trouve :
3+3+3+3+3+3+3+3+1 = 25. Si on divise par 16 on trouve 1 avec un reste de 9.
On obtient donc la suite de controle 01 9D.
Pour réaliser cette opération il faut que je récupère indépendament les chiffres des unités
(qui peuvent être aussi des lettres hexa) et ceux des dizaines, centaines ... etc
J'ai plus trop la force de chercher pour le moment ^^. J'avais bien penser a faire des modulos 10,
mais avec les caractères A -> F je sais pas trop comment ca se passe.
Merci