CCITT标准的CRC16计算

#define POLY        0x1021  
/**
*CITT标准的CRC16计算
*addr:待计算数据的起始地址
*num:待计算数据长度(字节数)
*返回值:16位校验值
**/
uint16_t crc16(uint8_t *addr, uint32_t num)  
{  
    int i;  
    uint16_t crc = 0xFFFF;
    for (; num > 0; num--)
    {  
        crc = crc ^ (*addr++ << 8);
        for (i = 0; i < 8; i++) 
        {  
            if (crc & 0x8000)
                crc = (crc << 1) ^ POLY; 
            else                        
                crc <<= 1;
        }                 
        crc &= 0xFFFF; 
    } 
    return(crc);
}  

发表评论