Cpp
2010.08.31 09:47

CCITT CRC-16

조회 수 45872 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form


#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);
}


TAG •

List of Articles
번호 카테고리 제목 글쓴이 날짜 조회 수
152 Network 로컬 네트워크에서 MAC 주소 알아보기 비트겐스 2011.02.18 29260
151 Device Driver I2C 디바이스 드라이버 응용 / TCN75 2 비트겐스 2011.01.04 37704
150 Cpp Memory Areas and Using malloc() 비트겐스 2010.10.18 21524
149 Cpp unix timestamp to date & time string in c 비트겐스 2010.10.01 31387
» Cpp CCITT CRC-16 2 비트겐스 2010.08.31 45872
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 ... 39 Next
/ 39