[Home]Cyclic Redundancy Checksum

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))
Suchbegriff: gesucht wird
im Titel
im Text