![]() |
|
Somme de contrôle |
![]() ![]() ![]() |
![]() |
Si le message compte moins de 100 octets, la somme s0 est formée par l'addition de tous les octets du paquet. Si le message compte 100 octets ou plus, la somme s0 est formée par l'addition des 50 premiers et 50 derniers octets.
Dans les deux cas, l'octet de la somme de contrôle doit être initialisé par 0. La somme de contrôle se calcule par la formule
Somme de contrôle = 0xff - s0
unsigned char checksum( const unsigned char* données_utiles, unsigned int Longueur_données_utiles) const { unsigned char s0 = 0;
if( Longueur_données_utiles < 100 ) { for( int i = 0; i < Longueur_données_utiles; ++i ) { s0 += Données_utiles[i]; } } else { for( int i = 0; i < 50; ++i ) { s0 += Données_utiles[i]; } for( int i = Longueur_données_utiles-1; i >= Longueur_données_utiles - 50; --i ) { s0 += Données_utiles[i]; } }
return ( 0xFF - s0 ); }
Pour vérifier que le paquet a été correctement transmis, on additionne, pour les messages comptant moins de 100 octets, tous les octets du paquet pour former la somme s1. Si le message compte 100 octets ou plus, la somme s1 est formée par l'addition des 50 premiers et 50 derniers octets.
Le paquet est correct si
s1 = 0xFF |