#include int main (int argc, char *argv[]) { unsigned long crc; unsigned int inputByte, inputBit; int i, j; if (argc < 2) { return 0; } crc = 0; if (argc >= 3) { sscanf (argv[2], "%04lX", &crc); } for (i = 0; argv[1][2 * i] != '\0'; i++) { sscanf (argv[1] + 2 * i, "%02X", &inputByte); for (j = 0; j < 8; j++) { inputBit = ( (inputByte & (1 << j)) != 0 ); inputBit ^= (crc & 1); crc >>= 1; if (inputBit) { crc ^= 0xA001; } } } printf ("%04lX\n", crc); return 0; }