;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 |
;Antwort: Würden diese Zeichen berücksichtigt, wäre kein systemunabhängiger Austausch der Daten möglich. (Du hast CR vergessen ;-) ) -- rae |
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]); . . .
Siehe AustauschFormatDiskussion