>>// >>// CRC Calculation & Checking routines for Kingfisher Protocol >>// >>unsigned int kf_crc_calc(BYTE *string, int charnum) >>{ >>int i, j; >>int c, crc = 0; >>for (i=0; i<charnum; i++) >>{ c = string[i] & 0xff; >>for (j=0; j<8; j++) >>{ if (crc & 0x8000) >>{ crc <<= 1; >>crc += (((c <<= 1) & 0x100) != 0); >>crc ^= 0x1021; >>} >>else >>{ crc <<= 1; >>crc += (((c <<= 1) & 0x100) != 0); >>} >>} >>} >>return(crc); >>} >>int kf_crc_check(BYTE *string, int charnum) >>{ >>unsigned int crc1 = kf_crc_calc(string, charnum); >>unsigned int crc2 = (int)string[charnum] * 256 + (int)string[charnum+1]; >>if (crc1 == crc2) return(0); >>else return(1); >>} >>void kf_crc_append(BYTE *string, int charnum) >>{ >>unsigned int crc = kf_crc_calc(string, charnum); >>string[charnum] = crc / 256; >>string[charnum + 1] = crc % 256; >>} >>>
> class test2 > { > static void Main() > { > } > > static uint kf_crc_calc(string s, int charnum) > { > int i, j; > uint c, crc = 0; > > for (i = -1; ++i < charnum; ) > { > c = (uint)s[i] & 0xffu; > > for (j = 0; j < 8; j++) > { > c <<= 1; > > if ((crc & 0x8000u) != 0) > { > crc <<= 1; > if ((c & 0x100u) > 0) > crc++; > crc ^= 0x1021u; > } > else > { > crc <<= 1; > if ((c & 0x100u) > 0) > crc++; > } > > } > } > > return crc; > > } > } >Thanks Gregory,