Je dois faire le checksum d'une chaine de caractères reçue.
Définition du checksum : une addition sur 16 bits de tous les octets de la chaine.
Comment coder ça en delphi ?
Merci
Je dois faire le checksum d'une chaine de caractères reçue.
Définition du checksum : une addition sur 16 bits de tous les octets de la chaine.
Comment coder ça en delphi ?
Merci
d'apré mes connaissance :d'aprés policope d'une balanse SYBER C10le checksum sera le résultat d'un ou exclusif de tous les bytes précédents le chcksum (y compris le caratère de trame <stx> si validé dans les param_tres "communication") et du nombre de bytes du message. les caract_res <CR> et <LF> ne sont pas intégrés dans ce calcul (il sont situés après le checksum) le résultat est divisé en bytes; à chacun des bytes, on ajoute $30.
PAS DE DESTIN, C'EST CE QUE NOUS FAISONS
Moi j'aurais bien vu ça comme ça
Bon, le pb c'est que Delphi refuse de compiler, becoze ord ne peut donner que l'ascii d'un char, alors que midstr renvoie un string... types incompatibles assuré!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 For c:=1 to length(chaine) do sum:=sum+ord(midstr(chaine,c,1));
Un transtypage du style word(midstr(chaine,c,1)) plante pour la même raison.
Mais au fait, comment loger une chaine de x caractères dans 16 bits
J'ai peut-être pas tout compris à la question...
Bon là je sèche!
Choisir, c'est renoncer...
http://delphi.developpez.com/faq/?pa...aracterechaine
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 For c:=1 to length(chaine) do sum:=sum+ord(Chaine[c]);
si ma notation pour toi est exact alors
bien sur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 type monresult=array[1..2] of byte; function calculsum(s:string):monresult; var i,sum:integer; begin sum:=0; for i:=1 to length(s) do sum:=sum xor ord(s[i]); result[1]:=$30+sum and $F; result[2]:=$30+(sum shr 4) and $F; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 var t:monresult; begin t:=calculsum(s); s:=s+chr(t[2])+chr(t[1]); ...... end;
PAS DE DESTIN, C'EST CE QUE NOUS FAISONS
On peut écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 function Summ ( s : string ) : longint; var p : pointer; i,n : byte; L : longint; begin L:=0; p:= @s[1]; // ou s[0] si on veut inclure le byte donnant la longueur for i:=1 to length(s) do begin inc( L, byte(p^) ); inc( longint(p) ); end; Summ := L; end;
J'ai un exemple de CRC sur une chaine.
Après application des 3 codes.
For c:=1 to length(chaine) do
sum:=sum+ord(Chaine[c]);
et le code de "edam"
donnent le bon résultat.
La fonction "calculsum" ne donne pas le bon résultat.
Merci pour votre aide.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager