#define POLY 0x8408 /* // 16 12 5 // this is the CCITT CRC 16 polynomial X + X + X + 1. // This works out to be 0x1021, but the way the algorithm works // lets us use 0x8408 (the reverse of the bit pattern). The high // bit is always assumed to be set, thus we only use 16 bits to // represent the 17 bit value. */ UINT16 CCITT_CRC16(char *data_p, UINT16 length) { unsigned char i; unsigned int data; unsigned int crc = 0xffff; if (length == 0) return (~crc); do { for (i=0, data=(unsigned int)0xff & *data_p++;i < 8; i++, data >>= 1) { if ((crc & 0x0001) ^ (data & 0x0001)) crc = (crc >> 1) ^ POLY; else crc >>= 1; } } while (--length); crc = ~crc; data = crc; crc = (crc << 8) | ((data >> 8) & 0xff); return (crc); }
Cpp
2010.08.31 09:47
CCITT CRC-16
조회 수 46219 추천 수 0 댓글 2
TAG •
-
?
X^16+X^12+X^5+1에서 X가 의미하는게 뭐죠?
- ?
번호 | 카테고리 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
152 | Network | 로컬 네트워크에서 MAC 주소 알아보기 | 비트겐스 | 2011.02.18 | 29265 |
151 | Device Driver | I2C 디바이스 드라이버 응용 / TCN75 2 | 비트겐스 | 2011.01.04 | 38405 |
150 | Cpp | Memory Areas and Using malloc() | 비트겐스 | 2010.10.18 | 21528 |
149 | Cpp | unix timestamp to date & time string in c | 비트겐스 | 2010.10.01 | 31393 |
» | Cpp | CCITT CRC-16 2 | 비트겐스 | 2010.08.31 | 46219 |