/* (c) kreator, 2000AD * rijec je o CCITT CRC 16 */ #include #include #define POLY 0xa001 /* 0x8408 /* 0x1021 */ void crc16(unsigned data, unsigned *crc) { int i; for (i=0; i<8; ++i) { if ((*crc & 0x0001) ^ (data & 0x0001)) *crc=(*crc >> 1) ^ POLY; else *crc>>=1; data>>=1; } } void crc16string(char *string, unsigned *crc) { char *stringptr=string; do crc16(*stringptr, crc); while (*(++stringptr)); } int main(void) { char stringy[255]; unsigned int crc=0; fgets(stringy, 254, stdin); crc16string(stringy, &crc); fprintf(stdout, "string=%s crc=%u\n", stringy, crc); return EXIT_SUCCESS; }