星期二, 5月 11, 2004

CRC16 的教訓,更改type還是要先看source code.

原來的crc16:

static int CRC16(char *puchMsg, int usDataLen)
{
unsigned char uchCRCHi = 0xFF; // high byte of CRC initialized
unsigned char uchCRCLo = 0xFF; // low byte of CRC initialized
unsigned char uIndex; // will index into CRC lookup table

while (usDataLen--) { // pass through message buffer
uIndex = uchCRCHi ^ *puchMsg++; // calculate the CRC
uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex];
uchCRCLo = auchCRCLo[uIndex];
}

return (uchCRCHi << 8 | uchCRCLo);
}
因為compile時,unsigned char,int間轉換很麻煩,所以就擅自把不重要的部分
改為int,其他也還好,但是uIndex,本以為只不過是個index,應該沒關係,結果改了造成algorithm全錯。
仔細看:uIndex也是由查表來的喔。所以....

沒有留言:

網誌存檔