StartSeite | Neues | TestSeite | Teilnehmer | Projekte | Kategorien | Index | Einstellungen | Ändern
Das Generator-Polynom der Funktion wurde der CRC-Funktion aus OS-9 nachempfunden.
void simpleCrc(char *buffer, long length, long *crc)
{
register unsigned long mask = 0,
checksum = *crc,
numberOfBits = 0;
checksum &= 0x00ffffffL;
while (length != 0)
{
mask = (*buffer++)<<8;
length--;
if (length != 0)
{
mask += *buffer++;
length--;
}
mask <<= 8;
mask = (mask ^ checksum) & 0x00ffff00L;
checksum <<= 16;
mask >>= 2;
checksum ^= mask;
mask >>= 5;
checksum ^= mask;
numberOfBits = 0;
while (mask)
{
if (mask & 0x01)
numberOfBits++;
mask >>= 1;
}
if ( numberOfBits & 0x01)
checksum ^= 0x00800021L;
}
*crc = checksum & 0x00ffffffL;
}
Vor dem ersten Aufruf der Funktion muß die Variable, deren Zeiger in crc übergeben wird, mit -1 initialisiert werden. Die Verwendung der Funktion wird in dem folgenden Code-Fragment skizziert:
.
.
.
long crc = -1;
short i;
char *data[2];
.
.
.
data[0] = "this is a constant string";
data[1] = (char *) malloc(256);
for (i = 0; i < 256; i++)
data[1][i] = (char) i;
.
.
.
simpleCrc(data[0], strlen(data[0]), &crc);
simpleCrc(data[1], 256, &crc);
.
.
.
printf("The CRC of the given data is 0x%06x\n", crc);
.
.
.
free(data[1]);
.
.
.
- Frage
- Und von wo bis wohin genau soll die Checksumme berechnet werden? Über den ganzen File? Nur über den Abschnitt [classified words]? Von welchem Zeichen bis zu welchem Zeichen genau?
- Antwort
- Für alle Zeilen in dem Abschnitt classified words, vom ersten Zeichen bis zum letzten Zeichen ohne Zeilenende bzw. Kommentar. Hierbei werden führende und abschließende 'white spaces' nicht berücksichtigt. -- rae
- Frage
- Wie ist es mit Zeilenendezeichen-Problemen (CR-LF, oder LF), sollen die mitgerechnet werden, oder zeilenweise ohne Zeilenendezeichen?
- Antwort
- Würden diese Zeichen berücksichtigt, wäre kein systemunabhängiger Austausch der Daten möglich. (Du hast CR vergessen ;-) ) -- rae
Non german speakers can translate this page with 'babelfish', which can be found at http://babelfish.altavista.com/translate.dyn.
Siehe AustauschFormatDiskussion
StartSeite | Neues | TestSeite | Teilnehmer | Projekte | Kategorien | Index | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 28. November 2000 10:26 (diff))