Calculer le CRC 16 utilisé dans le protocole XModem

Demandé et répondu par R&B le 27-Sep-2004 12:14

Calculer le CRC 16 utilisé dans le protocole XModem

Extrait d'un post de Kristian Paradis sur le forum de daussy.org :

J'avais demandé il y a peu de l'aide pour calculer le CRC 16 utilisé dans le protocole XModem.

J'ai finalement été capable d'adapter un algorithme de C++ que j'ai trouvé alors voila, si quelqu'un d'autre en a besoin.

(Ou si vous trouvez une faille, vous pouvez m'en faire part! ;))


Procédure mCalculerCRC(_Chaine)

//Renvoie une chaine sur 2 octets.

eBit est un entier
eOctet est un entier

eCaract est un entier sans signe
eCRC est un entier sans signe

cChaine est une chaine = _Chaine

pour eOctet = 1 a taille(cChaine)

eCaract = asc(cChaine[[eOctet]])*0x100

eCRC = ouexbinaire(eCRC,eCaract)

pour eBit = 0 a 7

si etbinaire(eCRC,0x8000) <> 0 alors
eCRC = eCRC * 2
eCRC = ouexbinaire(eCRC,0x1021)
sinon
eCRC = eCRC * 2
FIN

fin

eCRC = etbinaire(eCrC,0xFFFF)

FIN

renvoyer caract(partieentiere(eCrC/256)) + caract(modulo(eCrc,256))


Kristian Paradis

Cette Q&R a été trouvée sur WDForge.org : http://old.wdforge.org/modules/smartfaq/faq.php?faqid=43