#include #include #include main( ) { FILE *ifp; char line[100],c4[5]; int crc[16], crcold[16], i, j, k, l, dbit, m[256] = {0}; ifp = fopen("crc_in.txt","r"); if (!ifp) { printf("crc_simin: Cannot open input file crc_in.txt %s\n"); exit(1); } l = 0; // printf("start read\n"); while ( fgets(line, 100, ifp) != NULL) { int length; //find the length of the line length = strlen(line); for(i = 0; i < length; i++) //remove space if(line[i] == ' '){ for(j = i; j < length; j++) line[j] = line[j+1]; length--; } for(i = 0; i < 16; i++){ strncpy(c4,line+(5+i*4),4); c4[4] = '\0'; sscanf(c4,"%x",&k); m[l*16+i] = k; // printf("%04x",m[l*16+i]); } // printf("\n"); l++; } // printf("input done\n"); for(i=0;i<256;i+=2){ j = m[i]; m[i] = m[i+1]; m[i+1] = j; } for(i=0;i<16;i++) crcold[i] = 1; // for(i = 1; i < 233; i++){ for(i = 1; i < 233; i++){ for(j = 0; j < 16; j++){ if(m[i] & 0x8000) dbit = 1; else dbit = 0; m[i] = m[i] << 1; crc[0] = (crcold[15] + dbit)%2; crc[1] = crcold[0]; crc[2] = (crcold[15] + crcold[1]+dbit)%2; for(k = 3; k <15 ; k++) crc[k] = crcold[k-1]; crc[15] = (crcold[15] + crcold[14]+dbit)%2; for(k = 0; k <16 ; k++) crcold[k] = crc[k]; } } k = 0; for(l = 0; l <16 ; l++) if(crc[l]) k += (1 << l); printf("crc attached = %04x, crc calculated = %04x\n",m[233],k); fclose(ifp); }