BOnjour
Cherche specialiste pour m'aider dans calcul Checksum en RPGLE
(ASCII HEXA.....) .
C TALHOUET
BERNARD/JEAN FLOC'H
02 97 61 66 21
Calcul CHECKSUM
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
CHECKSUM
Bonjour,
Vous me dites, au téléphone, que le CHECKSUM calculé doit être la somme des différents octets dont on ne garde que la partie droite :
Exemple x'02414243454546' (41=A en ASCII = 65 en décimal, 46 = 66, etc...)
la somme de tout cela doit faire 407, soit x'197', dont on ne garde que 97.
je vous propose le code suivant (qui fonctionne en debug)
si vous devez isoler les caractères 9 et 7, le code suivant doit le faire
Vous me dites, au téléphone, que le CHECKSUM calculé doit être la somme des différents octets dont on ne garde que la partie droite :
Exemple x'02414243454546' (41=A en ASCII = 65 en décimal, 46 = 66, etc...)
la somme de tout cela doit faire 407, soit x'197', dont on ne garde que 97.
je vous propose le code suivant (qui fonctionne en debug)
Code : Tout sélectionner
dchaine S 40 inz(x'02414243444546')
di S 5 0
* pour placer un octet et le considérer comme une donnée binaire
duncar DS
d binaire 3u 0
* pour faire la somme et ne conserver que l'octet le plus à droite
dchecksumDS DS
d somme 10u 0
d checksum 1 overlay(checksumDS:4)
dreponse S 1
/free
somme = 0;
for i = 1 to %len(%trim(chaine));
uncar = %subst(chaine:i:1);
somme += binaire;
ENDFOR;
// checksum contient 97
reponse= checksum;
*inLR = *on;
/end-free
Code : Tout sélectionner
uncar = checksum;
c1 = %char(%div(binaire : 16));
c2 = %char(%rem(binaire : 16));
Christian Massé (Volubis.fr)