#include view_bits(unsigned char c) { unsigned char bit; int i, j; printf("%d: ", c); for (i=0; i<8; i++) { bit= c<>i; bit= bit>>7-i; printf("%d", bit); } printf("\n"); } int main() { char message[3]; message[0]= 190; message[1]= 153; unsigned char byte=0; unsigned char bit=0; unsigned char i,j; unsigned char reg=0; unsigned char sjekk=0; unsigned int poly=19; unsigned int polysize= 5; for (i=0; i<2; i++) { byte= message[i]; printf("byte: "); view_bits(byte); for (j=0; j<8; j++) { /* calculate bit from byte */ bit= byte << j; bit= bit >> 7; printf(" bit: "); view_bits(bit); /* calculate reg from reg and bit */ reg= reg << 1; reg |= bit; printf(" reg: "); view_bits(reg); sjekk= reg & 16; if (sjekk > 0) { reg ^= poly; printf(" reg-ans: "); view_bits(reg); } } } printf("adding last 4 bits\n\n"); bit=0; for (j=0; j<4; j++) { /* calculate reg from reg and bit */ reg= reg << 1; printf(" reg: "); view_bits(reg); sjekk= reg & 16; if (sjekk > 0) { reg ^= poly; printf(" reg-ans: "); view_bits(reg); } } /* add the crc to the message */ message[3]= reg; return 0; }