C语言CRC16校验码程序

本文深入解析了CRC校验码的计算原理及具体实现,通过详细的C语言代码示例,阐述了如何利用位操作和异或运算进行CRC校验码的生成。适合于嵌入式系统开发人员和对数据通信感兴趣的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CRC校验码计算公式
int  CRC_Check(char *m_Data,short m_Size)
{
    int i0,i1;
    char CRC16Lo,CRC16Hi;                     //CRC寄存器
    char SaveHi,SaveLo;
    CRC16Lo = 0xFF;
    CRC16Hi = 0XFF;
    for(i0=0;i0<m_Size;i0++)
{
        CRC16Lo = CRC16Lo ^ *(m_Data+i0);      //每一个数据与CRC寄存器进行异或
        for(i1=0;i1<8;i1++)
{
            SaveHi = CRC16Hi;
            SaveLo = CRC16Lo;
            CRC16Hi >>=1;                      //高位右移一位
            CRC16Lo >>=1;                      //低位右移一位
            if((SaveHi & 1) == 1)              //如果高位字节最后一位为1
{
                CRC16Lo |=0x80;                //则低位字节右移后前面补1
}
            if((SaveLo & 1) == 1)              //如果LSB为1,则与多项式码进行异或
{
                CRC16Hi ^=0XA0;
                CRC16Lo ^=1;
}
}
}
return ( CRC16Hi << 8 )| CRC16Lo;
}
CRC校验码计算公式
int  CRC_Check(char *m_Data,short m_Size)
{
    int i0,i1;
    char CRC16Lo,CRC16Hi;                  //CRC寄存器
    char SaveHi,SaveLo;
    CRC16Lo = 0xFF;
    CRC16Hi = 0XFF;
    for(i0=0;i0<m_Size;i0++)
{
        CRC16Lo = CRC16Lo ^ *(m_Data+i0);  //每一个数据与CRC寄存器进行异或
        for(i1=0;i1<8;i1++)
{
            SaveHi = CRC16Hi;
            SaveLo = CRC16Lo;
            CRC16Hi >>=1;                   //高位右移一位
            CRC16Lo >>=1;                   //低位右移一位
            if((SaveHi & 1) == 1)           //如果高位字节最后一位为1
{
                CRC16Lo |=0x80;             //则低位字节右移后前面补1
}
            if((SaveLo & 1) == 1)           //如果LSB为1,则与多项式码进行异或
{
                CRC16Hi ^=0XA0;
                CRC16Lo ^=1;
}
}
}
return ( CRC16Hi << 8 )| CRC16Lo;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值