CRC CCITT16 原理和实现

本文介绍了CRC CCITT16的基本原理,通过模拟除法过程来计算校验码。详细阐述了CRC算法如何通过GF(2)多项式进行数据校验,并提供了计算过程的伪代码和Java实现,帮助读者理解并实现CRC16校验。

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

在网上找了很多资料, 也看了别人写的CRC的实现代码,但发现都不是很懂,大多都没有注释,于是自己就找一个最简单原理去实现,先后把实现后计算出来的结果和网上一个关于CRC计算的结果相比较,来验证自己是否写的是对的.
这里是一个关于CRC计算的网站.

现在来开始讲解原理部分,我只列出最简单的一部分.
CRC算法将长度为m位的消息对应一个GF(2)多项式M,比如对于4位消息1111,则它对应的多项式为x^3 + x^2 + x^1 + x。发送端和接收端约定一个次数为r的 GF(2)多项式G,称为生成多项式,比如x^3 + 1,r = 3, 它对应的二进制码是1001。在消息后面加上r个0对应的多项式为M’,显然有M’ = Mx^r。用M’除以G将得到一个次数等于或小于r - 1的余数多项式R,其对应的r位数值则为校验码。如下所示:

         1110        商为1110,商有4位,表示进行了4XOR 
     ________ 
1001/1111000        被除数是1111000,除数是1001 
     1001    ^ 
     ---- 
      1100     第一次XOR后得到011,加入下一位0。最高位的0可以消掉了,这样最高位是1,所以下个商是1 
      1001    ^ 
      ---- 
       1010    第二次XOR后得到0101,加入下一位0。最高位的0可以消掉了,这样最高位是1,所以下个商是1 
       1001    ^ 
       ---- 
        0110   第三次XOR后得到0011,加入下一位0。最高位的0可以消掉了,这样最高位是0,所以下个商是0 
        0000    ^ 
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值