首页 > 编程知识 正文

通信基本知识和通信协议,简述通信协议的概念

时间:2023-05-05 10:50:01 阅读:233598 作者:3891

四、常见的数据编码 (1)字符编码ASCII码

所有的信息最终都表示为一个二进制的字符串,每一个二进制位有 0 和 1 两种状态,通过不同的排列组合,使用 0 和 1 就可以表示世界上所有的东西。

在计算机种中,1 字节对应 8 位二进制数,而每位二进制数有 0、1 两种状态,因此 1 字节可以组合出 256 种状态。如果这 256 中状态每一个都对应一个符号,就能通过 1 字节的数据表示 256 个字符。美国人于是就制定了一套编码(其实就是个字典),描述英语中的字符和这 8 位二进制数的对应关系,这被称为 ASCII 码

ASCII 码一共定义了 128 个字符,例如大写的字母 A 是 65(这是十进制数,对应二进制是0100 0001)。这 128 个字符只使用了 8 位二进制数中的后面 7 位,最前面的一位统一规定为 0。


(2)BCD码

二-十进制代码,也可以叫BCD码,通常用4位二进制代码对十进制数字符号进行编码 。

8421码

8421码是一种有权码,0~9的8421码与其二进制码完全相同,所以说求一个数的8421码就将这个数按位转化为二进制(四位,不足前面补0)。举个栗子,十进制的25,二进制为11001,8421码为0010 0101。

5421码

5421码是一种有权码,4位二进制码的权依次为5,4,2,1。从十进制的0~9转换为5421码,就是按照每一位的权凑出所要的数字,比如说9,9=5+4,所以9的5421码就是1100。但是4位二进制码可以表示16个数,十进制中只有10个,就会有6个用不到(不允许出现),这6个分别是0101,0110,0111和1101,1110,1111。我们可以从中得出这样的规律,在凑5421码的时候,先用大的数。

我们可以看到前3个数真正的5421码1的位置比不允许出现的凑法要靠前,也就是说要先用大的数来凑。

2421码

2421码也是一种有权码,4位二进制码的权依次为2,4,2,1.从十进制的数字转换到2421码也是凑的思路。但是出现了两个2,并且还有4(=2+2)就注定了这个规律要比5421码稍微复杂一点。简单来说就是,先用4来凑(除了5,它的2421码为1011),>5的数先用第一个2,<5的数先用第二个2。

余3码

余3码是一种无权码,也比较好计算,就是在数字二进制的基础上加上0011,也就是在数字8421码的基础上再加上0011。

五、校验码

这是最简单的校验方式,在信息编码的时候,将字的最高位作为校验位。需要说明的事奇偶校验也有两种校验方式:奇校验和偶校验

(1)奇偶校验码

奇校验:在最高位添加0或1,使字编码中的“1”的个数为奇数。
偶校验:在最高位添加0或1,使字编码中的“1”的个数为偶数。

校验特点:一次能校验更多的数据,效率较高,系统实现也比较简单,检测可靠性有所提高,但仍然不能检测出所有的错误。

举例:给出编码 1001101 的奇校验码和偶校验码。

解:设最高位为校验位,余7位是信息为,则对应奇偶校验码为:
1100 1101(奇校验) 01001101(偶校验)

(2)海明校验码(Hamming Code)

海明码也是利用奇偶性来校验数据的. 它是一种多重奇偶校验检错系统,它通过在数据位之间插入k个校验位,来扩大码距,从而实现检错和纠错.

设原来数据有n位,要加入k位校验码.怎么确定k的大小呢? k个校验位可以有pow(2,k) (代表2的k次方) 个编码,其中有一个代表是否出错. 剩下pow(2,k)-1个编码则用来表示到底是哪一位出错. 因为n个数据位和k个校验位都可能出错,所以k满足pow(2,k)-1 >= n+k。

举例:
设 k个校验码为 Pk,…,P1, n个数据位为D(n-1),…,D1,D0,产生的海明码为 H(n+k),…,H1。如有8个数据位,根据pow(2,k)-1 >= n+k可以知道k最小是4。那么得到的海明码是:



从表中可以看出
P1校验 P1,D0,D1,D3,D4,D6
P2校验 P2,D0,D2,D3,D5,D6
P3校验 P3,D1,D2,D3,D7
P4校验 P4,D4,D5,D6,D7
其实上表很有规律很容易记,要知道海明码Hi由哪些校验组校验,可以把i化成二进制数数中哪些位k是1,就有哪些Pk校验

如H7 7=0111 所以由P1,P2,P3。 H11 11=1011 所以由P1,P2,P4。 H3 3=0011 所以由P1,P2

那看看Pi的值怎么确定,如果使用偶校验,则
P1=D0 xor D1 xor D3 xor D4 xor D6
P2=D0 xor D2 xor D3 xor D5 xor D6
P3=D1 xor D2 xor D3 xor D7
P4=D4 xor D5 xor D6 xor D7
其中xor是异或运算,奇校验的话把偶校验的值取反即可.

那怎么校验错误呢. 其实也很简单. 先做下面运算.
G1 = P1 xor D0 xor D1 xor D3 xor D4 xor D6
G2 = P2 xor D0 xor D2 xor D3 xor D5 xor D6
G3 = P3 xor D1 xor D2 xor D3 xor D7
G4 = P4 xor D4 xor D5 xor D6 xor D7

若采用偶校验,则G4G3G2G1全为0表示接收到的数据无错误(奇校验则应全为1)。当G4G3G2G1不全为0说明发生了错误,而且G4G3G2G1的十进制指出了发生错误的位置,例如 G4G3G2G1=1010,说明H10(D5)出错了,将其取反即可纠正错误。

(3)循环冗余校验码(Cyclic Redundancy Check)

定义—— 循环冗余校验码由信息码n位和校验码k位构成。k位校验位拼接在n位数据位后面,n+k为循环冗余校验码的字长,又称这个校验码(n+k,n)码

n位信息位可以表示成为一个报文多项式M(x),最高幂次是xn-1。约定的生成多项式G(x)是一个k+1位的二进制数,最高幂次是xk。将M(x)乘以xk,即左移k位后,除以G(x),得到的k位余数就是校验位。这里的除法运算是模2除法,即当部分余数首位是1时商取1,反之商取0。然后每一位的减法运算是按位减,不产生借位。

特点—— 理论上可以证明循环冗余校验码的检错能力有以下特点:①可检测出所有奇数位错;②可检测出所有双比特的错;③可检测出所有小于、等于校验位长度的突发错。

循环冗余校验码暂时,不具体举例!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。