Crc 16

Soyez le premier à donner votre avis sur cette source.

Snippet vu 29 729 fois - Téléchargée 30 fois

Contenu du snippet

Cette source permet de Calculer le CRC16 ou <Contrôle de redondance cyclique> d'un Tableau selon le Polynome 0xA001 en accord avec le protocol JBUS.

Source / Exemple :


Auteur : VirtuA 

unsigned int Crc16(unsigned char *Adresse_tab , unsigned char Taille_max)	
{																
unsigned int Crc = 0xFFFF;
unsigned int Polynome = 0xA001; 
unsigned char CptOctet = 0;
unsigned char CptBit = 0;
unsigned char Parity= 0;

Crc = 0xFFFF;
Polynome = 0xA001; // Polynôme = 2^15 + 2^13 + 2^0 = 0xA001.

for ( CptOctet= 0 ; CptOctet < Taille_max ;  CptOctet++)
  {    
   	Crc ^= *( Adresse_tab + CptOctet);  //Ou exculsif entre octet message et CRC
       
   for ( CptBit = 0; CptBit <= 7 ; CptBit++)  /* Mise a 0 du compteur nombre de bits */             
    {
     Parity= Crc;
	 Crc >>= 1;			    // Décalage a droite du crc
     if (Parity%2 == VRAI) Crc ^= Polynome; // Test si nombre impair -> Apres decalage à droite il y aura une retenue     
    }					    // "ou exclusif" entre le CRC et le polynome generateur.
  }
return(Crc);
}

Conclusion :


La fonction renvoie un INT ( CRC16 sur 2 octets ).

Un petit soft complet réalisé en C++ sera disponible sur mon site perso
http://www.virtuanet.fr.st

A voir également

Ajouter un commentaire

Commentaires

Cyberboy2054
Messages postés
173
Date d'inscription
jeudi 20 décembre 2001
Statut
Membre
Dernière intervention
22 août 2008

Concrètement, ca sert a quoi ? obtenir le hash sur 16bits d'une chaine, pointée par Adresse_tab ?
MetalDwarf
Messages postés
241
Date d'inscription
mardi 29 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2006

Les algorithmes CRC servent a calculer des empreintes de donnees pour en verifier l'integrite. 2 empreintes identiques ne signifient pas que la transmission est exempte d'erreur, mais si elles sont differentes il y a necessairement une erreur. Ces algorithmes ne permettent pas de corriger les erreurs, mais de les detecter seulement. Leur interet est leur facilite d implementation et rapidite d execution par rapport a MD5 ou SHA-1 (mais avec une moins grande fiabilite et aucune garantie cryptographique).
Exemple d'application : les fichiers ZIP, RAR, GZIP, etc... sont controles de cette facon lors de la decompression, mais il y a bien plus d applications.
virtuA
Messages postés
15
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
29 août 2006

je ne l'aurai pas mieux expliqué moi même ;)
c'est tout à fait ca.
Pour ma part je m'en suis servis avec des appareils HF dont certains pilotés par PC, il m'a fallu sécuriser le protocole pour avoir un dialogue sur sans plantage.

++
RaphAstronome
Messages postés
105
Date d'inscription
samedi 7 décembre 2002
Statut
Membre
Dernière intervention
17 août 2009

unsigned int c'est du 32 bits, pour 16 bits unsigned short suffit.
Sinon très sympa ton code : 8/10
gwenCPP
Messages postés
20
Date d'inscription
vendredi 28 janvier 2005
Statut
Membre
Dernière intervention
14 septembre 2006

Bonjour,

Désolé de mettre un commentaire tardif sur cette fonction mais je ne tombe pas sur le bon CRC dans mon protocole MODBUS. Avec cette fonction la valeur est presque bonne mais pas tout à fait juste. En Utilisant d'autres codes, je tombe sur les bonnes valeurs...

A vous de voir.
Gwen

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.