奇校验如果是检测位变了,还能检测出来吗?

以00为例,奇校验添加校验位1,就是100,如果检测位变了就是000,数据没错,但是检测后是0,这怎么办?谢谢

如果采用奇校验方式,在数据位为00时,应添加一个校验位1,得到的校验码为100。当接收方收到数据后,如果检测位的数值为0,那么说明数据传输中可能存在错误,需要重新发送数据。

如果检测位由于某种原因被改变,例如由1变为0,那么校验的结果就会不正确,这时候接收方可能会误认为数据存在错误,因此需要进行进一步的处理。一种常见的方法是在奇校验的基础上增加一个同位异或(CRC)校验,这可以提高校验的可靠性。

同位异或校验通常是将发送方数据按照一定的规则进行处理,然后添加一个校验码,接收方在接收数据后,同样按照相同的规则进行处理,然后将得到的结果与校验码进行比较,如果一致则说明数据传输没有错误。如果不一致,则说明数据传输存在错误,需要重新发送数据。

以下答案引用自GPT-3大模型,请合理使用:

。

如果以 00 为例,用奇校验添加一位校验位,就是 100,如果检测位变成 000,说明校验位已经发生了变化,系统将无法检测出来。此时,可以采用一定的规则来判断检测位是否正确,以通过校验。

代码如下:

//定义检测位
int check_bit = 0;

if (check_bit == 0)  // 如果检测位为0
{
    // 对位数进行奇校验,若奇校验结果为1
    if (checkOdd(data) == 1) 
    {
        check_bit = 1;  // 则修改检测位为1
    }
}
else // 如果检测位为1
{
    // 对位数进行奇校验,若奇校验结果为0
    if (checkOdd(data) == 0) 
    {
        check_bit = 0;  // 则修改检测位为0
    }
} 

// 根据修改后的检测位,对原始数据进行奇校验
if (checkOdd(data, check_bit) == 1) 
{
    printf("The data is right\n");
}
else
{
    printf("The data is wrong\n");
}

如果我的回答解决了您的问题,请采纳我的回答