(gelöst) 8bit CRC CITT Checksummen Problem ...
Verfasst: 26. April 2011 19:50
Hallo Zusammen,
ich habe für das S.N.A.P. Protocoll von hth.com eine serielle Übertragung geschrieben.
Nur habe ich Fehler in der Checksummenberechnung.
Laut Doc. soll für den String "SNAP " die Checksumme 0x11 herauskommen.
Laut Doc. soll für den String "SNAP " die Checksumme 0xb2 herauskommen.
Meine Routine gibt aber 0xe und 0x6 raus.
Hier der Code:
Hat jemand eine Idee wo ich ansetzen kann, da ich hier nicht sehr bewandert bin.
Und laut Wiki Seite ist dieser Code wohl richtig. Nicht der schnellste (da keine Tabelle verwendet wird), aber das wäre danach dran, wenn nötig.
Gruss R.
ich habe für das S.N.A.P. Protocoll von hth.com eine serielle Übertragung geschrieben.
Nur habe ich Fehler in der Checksummenberechnung.
Laut Doc. soll für den String "SNAP " die Checksumme 0x11 herauskommen.
Laut Doc. soll für den String "SNAP " die Checksumme 0xb2 herauskommen.
Meine Routine gibt aber 0xe und 0x6 raus.
Hier der Code:
Code: Alles auswählen
unsigned char SNAP_Serial::getCheckSum8BitCRC_CITT ( unsigned char *pointer )
{
unsigned char crcPolynominal = 0x18; // X^8+X^5+X^4+1
unsigned char crc = 0x0;
int Size;
Size = 4; // zu Testzwecken drin, da ich hard "SNAP" und "snap" übergebe
for (int i = 0; i < Size ; i++ )
{
crc = crc ^ *( pointer + ( long ) i );
for ( int j = 0; j < 8; j++ )
{
if ( crc & (unsigned char) 0x1 )
crc = ( crc >> 1 ) ^ crcPolynominal;
else
crc = ( crc >> 1 );
}
}
return ( crc );
}
Und laut Wiki Seite ist dieser Code wohl richtig. Nicht der schnellste (da keine Tabelle verwendet wird), aber das wäre danach dran, wenn nötig.
Gruss R.