Sara_04
Messages postés1Date d'inscriptionmardi 25 mai 2021StatutMembreDernière intervention25 mai 2021
-
Modifié le 26 mai 2021 à 10:06
cs_yanb
Messages postés271Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention 7 juillet 2022
-
8 juil. 2021 à 15:39
bonjour chers amis ,
j' ai besoin d intégré dans mon projet delphi un algorithme de calcul CRC pour vérifier la totalité d une chaine de donnée Hex, je suis obligé d utiliser un algo type CRC16_mcrf4xx
malheureusement je n ai pas trouvé des articles qui explique clairement cet algo, par contre , j ai trouvé une implémentation en C, j espère trouvé ici une âme charitable qui pourrait m aider a traduire ce code :
A noter qu'il y a des variables en 8bits et en 16 bits, je ne sais pas comment Delphi gère ça aujourd'hui dans des environnement 64bits.
Te renseigner sur la correspondance des opérateurs, par exemple == correspond à =, alors = correspond à :=
Te renseigner sur les opérateurs qui combinent une opération et une affectation par exemple
a += b
veut dire qu'on additionne les valeurs de a et de b et qu'on affecte le résultat à a.
a++
veut dire qu'on ajoute 1 à a et qu'on affecte le résultat à a.
Te renseigner sur les pointeurs,
*data
en est un.
Te renseigner sur l'algèbre de bool, car il y a des ou binaires, des et binaires et des décalages de bits.
Et ça ne coule pas de source, en bool, l'opérateur ou s'écrit + et "2 + 3" ça fait "3" parce que *2 c'est 10,
3 c'est 11
bit à bit 0 ou 1 ça fait 1 et 1 ou 1 ça fait 1 aussi, donc 11 c'est 3.
cs_yanb
Messages postés271Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention 7 juillet 202214 8 juil. 2021 à 15:39
Salut,
CRC16 mcrf4xx
Le polynome $1021
Le reflet $8408
Le reciproque $8810
...
Traduction de la fonction que tu donnes...
function StrToCRC16(S: string): UInt16;
var
J : Integer;
I : Integer;
begin
Result := 0;
for J := 1 to Length(S) do
begin
Result := Result xor Ord(S[J]);
for I := 1 to 8 do
begin
if Result and $0001 = $0001 then
Result := (Result shr 1) xor $8408
else
Result := Result shr 1;
end;
end;
end;