<< Click to Display Table of Contents >> Prüfsumme |
Ist die Nachricht kürzer als 100 Byte, so wird aus den einzelnen Bytes des gesamten Paketes die Byte-Summe s0 gebildet. Ist die Nachricht 100 Byte lang oder mehr, so berechnet sich s0 aus den ersten und den letzten 50 Byte der Nachricht.
In beiden Fällen muss das Byte für die Prüfsumme mit 0 initialisiert sein. Die Prüfsumme berechnet sich zu
Prüfsumme = 0xff - s0
unsigned char checksum( const unsigned char* Nutzdaten, unsigned int NutzdatenLänge ) const
{
unsigned char s0 = 0;
if( NutzdatenLänge < 100 )
{
for( int i = 0; i < NutzdatenLänge; ++i )
{
s0 += Nutzdaten[i];
}
}
else
{
for( int i = 0; i < 50; ++i )
{
s0 += Nutzdaten[i];
}
for( int i = NutzdatenLänge-1; i >= NutzdatenLänge - 50; --i )
{
s0 += Nutzdaten[i];
}
}
return ( 0xFF - s0 );
}
Um zu überprüfen, ob das Paket korrekt übertragen wurde, werden für Nachrichten kürzer als 100 Byte die einzelnen Bytes des gesamten Paketes zur Byte-Summe s1 aufsummiert. Ist die Nachricht 100 Byte lang oder mehr, so berechnet sich s1 aus den ersten und den letzten 50 Byte der Nachricht.
Das Paket ist korrekt, wenn gilt
s1 = 0xFF