C#版的CRC16校验

/// <summary>
/// CRC16 
/// </summary>
/// <param name="data">要进行计算的数组</param>
/// <returns>计算后的数组</returns>
private  static  byte []  CRC16( byte []  data)
{
     byte []  returnVal  =  new  byte [ 2 ];
     byte  CRC16Lo ,  CRC16Hi ,  CL ,  CH ,  SaveHi ,  SaveLo;
     int  i ,  Flag;
     CRC16Lo  =  0 xFF;
     CRC16Hi  =  0 xFF;
     CL  =  0 x86;
     CH  =  0 x68;
     for ( i  =  0i  <  data . Lengthi ++)
     {
         CRC16Lo  = ( byte)( CRC16Lo  ^  data [ i ]); //每一个数据与CRC寄存器进行异或
         for ( Flag  =  0Flag  <=  7Flag ++)
         {
             SaveHi  =  CRC16Hi;
             SaveLo  =  CRC16Lo;
             CRC16Hi  = ( byte)( CRC16Hi  >>  1); //高位右移一位
             CRC16Lo  = ( byte)( CRC16Lo  >>  1); //低位右移一位
             if (( SaveHi  &  0 x01==  0 x01) //如果高位字节最后一位为
             {
                 CRC16Lo  = ( byte)( CRC16Lo |  0 x80); //则低位字节右移后前面补 否则自动补0
             }
             if (( SaveLo  &  0 x01==  0 x01) //如果LSB为1,则与多项式码进行异或
             {
                 CRC16Hi  = ( byte)( CRC16Hi  ^  CH);
                 CRC16Lo  = ( byte)( CRC16Lo  ^  CL);
             }
         }
     }
     returnVal [ 0 ]  =  CRC16Hi; //CRC高位
     returnVal [ 1 ]  =  CRC16Lo; //CRC低位
     return  returnVal;
}

使用的时候改下默认寄存器值和多项式!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值