浅谈三种检错方式

三种检错方式:
1.位校验:
奇校验:在有效数据后面添加一个校验位使得整个数据中1的个数为奇数;
偶校验:在有效数据后面添加一个校验位使得整个数据中1的个数为偶数;
还可以进行二维的奇偶校验提高检错能力和纠错能力
2.校验和:
发送端构造校验和的步骤:
1)将d位需要校验的数据分成n个r位的整数;(r也就是校验和的位数)
2)将该n个整数进行二进制反码求和;
3)把求到的和的反码作为校验和附到原数据;
接收端验证的方式:
1)将接收到的包括校验和的d+r位数据分成n+1个r为整数;
2)对n+1个整数进行二进制反码求和;
3)得到的和为全1则校验成功,否则数据出错;
例:一个8为的数据11011000求4位的校验和:
反码求和:1101+1000=0110(反码求和和一般求和的唯一区别是:最高位的进位放到最低)from:http://blog.csdn.net/wplxb/article/details/1176873
发送到接收端的数据为:110110001001
接受端验证:1101+1000+1001=1111--》校验成功
3.crc循环冗余码
循环冗余码最基本的思想是将一个映射,这里给出一般的求解方法:
例子:一个数据D的位数为d=8:11000110,G=1001;求校验码R;
R比G要少一位,故R的位数r为3
R=D*2^r%G;
要注意的地方是在求余的过程中减法遵循我们平常的异或规则:
如:1001-0110=1111;1100-0011=1111;
就是说减法的借位不会在高位体现出来,虽然他可能确确实实向高位借了位!加法也
类似,即使有了进位也不会在高位体现。这就是所说的二进制算术。
接着上例,可以算出R=101;
R即为所求的crc校验码了;可以看到D&&R=11000110101就可以被G=1001整除了,接收端就是根据这条来判断校验是否成功的。
crc与校验和相比而言:比较复杂,但纠错能力有大幅提高。所以一般用在链路层,用专用的硬件结构实现。传输层由于用软件的方式提供服务,校验和的简单快速更适合用来校验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值