目录
GB18030:2005年 基本兼容GBK,兼容GB2312
#0x01BCD编码
用4位二进制表示1位十进制
有权码:即每一位代表一个权重,例如8421BCD码,5421BCD码
无权码:例如余三码,格雷码
作业:2.17
#0x02 非数值数据的编码
ASCII码:
最通用的单字节(8bit)编码系统
最高位保留,作为奇偶校验值
剩余7位表示数据,所以一共可以表示128种数据(包括10个数字,26个英文字母,26个大写字母,各种符号,还有控制码例如换行符,制表符等)
例如:字符'0'到'9'
char: 0011 0000 -> 0 <-0000 0000 数值
char: 0011 1001 ->9 <-0000 1001
汉字编码:
GB2312:1980年 两个字节表示一个汉字
一共编码了6763个常用汉字,其中一级汉字3755个,二级汉字3008个,除此之外还包括了682个字符
什么是区位码?
所谓区位码,就是将6763个编码进行分区(分成94个区(94行),94个位(94列))
这样就可以通过区和位来定位汉字的编码。
区和位都是从1开始编码:
1-9区的区号(9个区):A1到A9(位号从A1到FE),用来存字符
10-15区(6个区):保留,未使用
16-87区(72个区):用来存汉字
16-55区:用来存一级汉字,按照拼音排序。
55区有5个空位,因为一级汉字用不完分给他的区域
56-87区:用来存二级汉字,按照部首和笔画排序。
88区到94区:一共7个区,空白。
区位码=区位分别加上A0
例1:’啊‘是GB2312的第一个汉字,问其区位码是多少?
答:16区 1位,区位码:16+A0 1+A0 = B0A1
GBK:1995 两个字节表示一个汉字
GB2312
区的范围:A1到FE
位的范围:A1到FE
GBK
区的范围:81到FE
位的范围:40到FE
GB18030:2005年 基本兼容GBK,兼容GB2312
除了收录了简体的汉字,繁体的汉字,还收录了日韩语的汉字,并且支持少数民族的字。
多字节,不是固定的两个字节。
#检错纠错码
只能检错:
#奇偶校验码:
8位中,留一位作为校验码,
如果是奇校验码,则8位中1个数为奇数个
如果是偶校验码,则8位中1个数是偶数个
#循环冗余校验码:
1.取得要编码的信息,假设为F=1010010
2.接收方和发送方约定一个生成多项式,假设为G=x^3+x+1,用二进制表示为1011,L位,即将系数提取出来
3.将F左移l-1位。F=1010010 000
4.F/G 进行模2除法( https://baike.baidu.com/item/%E6%A8%A12%E9%99%A4%E6%B3%95/10416971?fr=aladdin
异或运算得到余数),得到余数R。
例如1010010 000/1011 只要满4位就可以上1,不满四位就上0,然后异或求余数
5.M=F+R,发送给接收方
6接受方收到M后除以R,如果能除尽,就没有错误。然后右移l-1位就得到正确的数据。
能检错也能纠错,可以定位到哪一bit出现了错误,只要取反就可以纠正错误
#汉明码:(重听)
1.要传输的数据有n位,假设需要r位校验码,确定r的值 2^r -1 >= n+r。
2.对n+r位信息进行编号
确定哪些位是校验位,哪些位是数据位。
例:
对10101110进行海明编码:
1.2^r+1 >=8+r 所以r=4,要检测出一位错误,需要4位校验码
2.编码后12位,其中2的幂次方为校验位
D12 | D11 | D10 | D9 | P8 | D7 | D6 | D5 | P4 | D3 | P2 | P1 |
1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 |
1=2^0
2=2^1
3=2^1+2^0
4=2^2
5=2^2+2^0
6=2+4
7=1+2+4
8=2^3
9=1+8
10=2+8
11=1+2+8
12=4+8
确定校验位的值为多少,假设用偶校验
P1对哪些位进行校验呢?上面拆分后有1的位,即1 3 7 9 11,对这些为的data进行偶校验,即异或即可
P1 = 0 ,只有p1为能0才能使得整体是偶数个1
P2对哪些位进行校验呢?上面拆分后有2的位,即2 3(0) 6(1) 7(1) 10(1)11(0)
P2 =1
P4=0
P8对哪些位进行校验呢?上面拆分后有8的位 8 9(0) 10(1) 11(0)12(1)
P8=0