//data 要校验的数据起始地址
//length 数据长度,多少字节
//sum 校验码
//mode 校验方式,true:奇校验,false : 偶校验
//返回值 true: 校验成功 false:校验失败
bool CheckSum(char *data,int length,char sum , bool mode)
{
char tmp=0
for(int i=0i<lengthi++)
{
tmp+=*data
data++
}
if(mode)
{
if(tmp+sum == 1)
{
return true
}
else
{
return false
}
}
else
{
if(tmp+sum == 0)
{
return true
}
else
{
return false
}
}
}
一、工作原理
奇偶校验码由n-1位信息元和1位校验元组成,可以表示成为(n,n-1)。如果是奇校验码,在附加上一个校验元以后,码长为n的码字中“1”的个数为奇数个;如果是偶校验码,在附加上一个校验元以后,码长为n的码字中“1”的个数为偶数个。
设:如果一个偶校验码的码字用A=[an-1,an-2,…,a1,a0]表示,则:(1)式中 为校验元,“+”为模二和(以后也这样表示,请注意)。
式(1)通常被称为校验方程。利用式(1),由信息元即可求出校验元。另外,如果发生单个(或奇数个)错误,就会破坏这个关系式,因此通过该式能检测码字中是否发生了单个或奇数个错误。
二、流程
1、奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数
1000110(0)必须添0。原来有3个1已经是奇数了所以添上0之后1的个数还是奇数个。
2、偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数
1000110(1)必须加1。原来有3个1要想1的个数为偶数就只能再添加1。
扩展资料
校验码的存在:
计算机系统运行时,各个部之间要进行数据交换.交换的过程中,会有发生误码的可能(即0变成1或1变成0),由于计算机的储存是通过二进制代码来实现的的,误码会导致储存的内容发生改变。为确保数据在传送过程正确无误,常使用检验码。
优点:简单,易于硬件实现
缺点:如上述,只能检测出奇数个错误。
因为在某些场合,发生错误的情况下,绝大多数都是出现一个错误,所以奇偶校验码有着很大的实用性。
参考资料来源:百度百科-奇偶校验码
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)