几种求CRC-CCITT的方法 [C/C#]

// 所有原创文章转载请注明作者及链接
//
blackboycpp(AT)gmail.com
// QQ群: 135202158

 

 

crc-ccitt算法图解

 

方法1:将存有数据的字节数组进行逐位计算,求得字节形式的CRC  

void  crc16( byte  d[],  int  len)
{
        
byte  b  =   0 ;
        
ushort  crc  =   0xffff ;
        
int  i, j;

        
for (i = 0 ; i < len; i ++ )
        
{        
                
for (j = 0 ; j < 8 ; j ++ )
                
{
                        b 
=  ((d[i] << j) & 0x80 ^  ((crc & 0x8000 ) >> 8 );
                        
                        crc
<<= 1 ;

                        
if (b != 0 )        crc ^= 0x1021 ;
                }

        }

        crc 
=   ~ crc;

        printf(
" crc: 0x%.4X " , crc);
}

 

方法2:提前构造0~255的CRC表,利用查表法计算CRC

ushort  crc_table[ 256 ] =
        
0x0000 0x1021 0x2042 0x3063 0x4084 0x50a5 0x60c6 0x70e7
        
0x8108 0x9129 0xa14a 0xb16b 0xc18c 0xd1ad 0xe1ce 0xf1ef
        
0x1231 0x0210 0x3273 0x2252 0x52b5 0x4294 0x72f7 0x62d6
        
0x9339 0x8318 0xb37b 0xa35a 0xd3bd 0xc39c 0xf3ff 0xe3de
        
0x2462 0x3443 0x0420 0x1401 0x64e6 0x74c7 0x44a4 0x5485
        
0xa56a 0xb54b 0x8528 0x9509 0xe5ee 0xf5cf 0xc5ac 0xd58d
        
0x3653 0x2672 0x1611 0x0630 0x76d7 0x66f6 0x5695 0x46b4
        
0xb75b 0xa77a 0x9719 0x8738 0xf7df 0xe7fe 0xd79d 0xc7bc
        
0x48c4 0x58e5 0x6886 0x78a7 0x0840 0x1861 0x2802 0x3823
        
0xc9cc 0xd9ed 0xe98e 0xf9af
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值