//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
}
}
}
呵辩仔呵,在这两条指令的前后,你各忽略了一条指令。请看下列程序腔旅及说明:MOV A,#待发数据 数据进了A,即刻生成校验位P
MOV C,P
MOV TB8, C 校验位送到TB8
MOV SBUF, A 发送数据,以及P
上述写法,是偶校验。奇伍灶凳校验,需要增加一条取反指令,如下:
MOV C,P
CPL C
MOV TB8, C 校验位送到TB8
就这些。
一、工作原理
奇偶校验码由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条)