假设数据为字符串C=0123456,以8位为单位分段,求出校验和,如果字符0在传输过程变为字符7?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了假设数据为字符串C=0123456,以8位为单位分段,求出校验和,如果字符0在传输过程变为字符7?相关的知识,希望对你有一定的参考价值。

假设数据为字符串C=0123456,以8位为单位分段,求出校验和,如果字符0在传输过程变为字符7,给出接收端的检错过程。

参考技术A 字符串校验和的一种实现方法是:
(1)把校验和字段设置为0。 (2)把需要校验的数据看成以8位为单位的数字组成,依次进行求和,得到的和二进制求反码,再加上1,最终得到校验和。 (3)把得到的结果存入校验和字段中。
对于您给出的数据C=0123456,以8位为单位分段,我们可以将其转换为ASCII码表示:
C=30 31 32 33 34 35 36
按照上述方法计算校验和:
(1)设置校验和字段为0:00 (2)依次求和:30+31+32+33+34+35+36=171 求反码:171的二进制表示为10101011,反码为01010100 加1:01010100 + 1 = 01010101 (3)存入结果:校验和字段为01010101
如果字符0在传输过程变为字符7,则接收端收到的数据为:
C=37 31 32 33 34 35 36
按照同样的方法计算校验和:
(1)设置校验和字段为0:00 (2)依次求和:37+31+32+33+34+35+36=178 求反码:178的二进制表示为10110010,反码为01001101 加1:01001101 + 1 = 01001110 (3)存入结果:校验和字段为01001110

c_cpp 以位为单位显示十六进制;与掩码一起使用按位AND。

#include <stdio.h>
#include <limits.h>
void displayBits( unsigned value );

void displayBits( unsigned value ){
  unsigned counter = 0;
  unsigned mask = 1 << CHAR_BIT * sizeof(char) - 1;

  for ( ; counter <= CHAR_BIT; counter++ ) {
    putchar(mask & value? '1' : '0');
    value <<= 1;

    if ( counter % 8 == 0 ) {
      putchar(' ');
    }
  }
}

以上是关于假设数据为字符串C=0123456,以8位为单位分段,求出校验和,如果字符0在传输过程变为字符7?的主要内容,如果未能解决你的问题,请参考以下文章

5checksum(校验和)的实现

python字符串试题

c语言输入无符号16位数判断这个数第8位是不是为1

[C语言学习]位段

C语言 段位

c_cpp 以位为单位显示十六进制;与掩码一起使用按位AND。