新闻  |   论坛  |   博客  |   在线研讨会
一个CRC16程序
mayer | 2009-06-16 18:31:17    阅读:2194   发布文章

一个CRC16程序

 

 

来源于TinyOS的Serial Message手册

/*======================================================

 函数: CalculateCRC16
 说明: 计算一段存储区的CRC16
 入口: *Pointer -- 源指针
   index  -- 偏移量
   count       --  计算长度
 出口: 返回uint16型的CRC计算结果
 
========================================================*/

uint16 calcByte(uint16 crc, uint16 b)
{
    uint16 i;

    crc = crc ^ (uint16)b << 8;
    for ( i = 0; i < 8; i++)
    {
        if ((crc & 0x8000) == 0x8000)
        {
            crc = crc << 1 ^ 0x1021;
        }
        else
     {
      crc = crc << 1;
     }
    }
    return crc & 0xffff;
}
uint16 CalculateCRC16(void *Pointer, uint16 index, uint16 count)
{
    uint16 crc = 0;
    uint8 *dp;

    dp = (uint8 *)Pointer;
    while (count > 0)
    {
     crc = calcByte(crc, dp[index++]);
     count--;
    }
    return crc;
}

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客