编码

1.BCD码:

二进制编码的十进制数,它用4个二进制位表示0-9中的一个数字,一定有6种冗余状态
1)8421码:是最常用的一种有权码,但是两个8421码相加大于1001需要进行进位修正
2)余3码:是一种无权码,8421码加0011就可以得到余三码
3)2421码:和8421类似是一种有权码

2.字符编码:

1)ASKII码:
用7位二进制表示,共128个,包括95个可印刷字符和其他一些控制字符,如A=65 ,0=48

2)Unicode:
用2到4个字节表示一个字符,它又有不同的编码格式:
UCS2是标准的Unicode编码,2表示它固定地占用2个字节
UCS4中4表示它固定地占用4个字节,它就是UTF-32,可以表示世界上所有字符

3)UTF-8:
UTF-8中8的意思是,每个字符最少占用8个bit;
UTF-8以字节为单位对Unicode进行编码,它可能占用1到6个字节;
对于英语字母,UTF-8编码和ASCII码是相同的,而汉字一般要占用3个字节;

单字节UTF8:0xxxxxxx
2字节UTF8: 110xxxxx 10xxxxxx
3字节UTF8: 1110xxxx 10xxxxxx 10xxxxxx
4字节UTF8: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

4)UTF-16:
每个字符最少占用2字节,有时也会占4个字节,不兼容ASKII码
UTF-16可看成是UCS-2扩展,在没有辅助平面字符前,UTF-16就是UCS-2,引入辅助平面字符后,就称为UTF-16了

4)UTF-32:
就是UCS-4,它固定地占用4个字节,可以表示世界上所有字符

3.汉字编码:

1)区位码:
用两个字节表示一个汉字,每个字节最大为94,两个字节组成94*94的一个矩阵,第一个字节称为区码,第二个字节成为位码

2)国标码GB:
国标码由区码和位码转成16进制然后分别加上20H得到,每个字节加20H的原因是为了避开ASCII码表的32个控制字符
例如,大”字的区内码为2083,区号为20,位号为83,在16进制下区号变为14,位号为53;
所以国标码为:1453H + 2020H = 3473H
GB2312包含7400多个字符,GBK扩展了GB2312,包含繁体,日韩文字共计20000多个字符

3)汉字内码:
用于计算机内部处理汉字,汉字内码 = 国标码 +8080(16进制)
同样以大”字为例,它的国标码为3473H,内码 = 3473H + 8080H = B4F3H

字符串的存放大小端的问题:
编码_第1张图片

4.校验码:

4.1校验码基本原理:

基本原理是通过向数据增加冗余信息,使得接收放可以根据冗余进行检错和纠错,比如4位二进制可以表示16种情况,但是我们只使用其中的8种进行编码,另外8种为非法码,接收方一旦收到非法码,就可以断定产生了错误

码距:
码距就是两个码字C1与C2之间不同的比特数。如:1100与1010的码距为2;1111与0000的码距为4。
最小码距:
比如一个系统需要传递4个字符ABCD,我们把ABCD分别编码为0000,0011,1100,1111,这样就得到了这个编码系统的4个码字,分别计算这四个合法码字之间的码距,得到码距可能为2或4,所以此时最小码距就是2

一个编码方案的最小码距和检错纠错数量的关系:
1.在一个码组内为了检测e个误码,要求最小码距应该满足: d>=e+1
2.在一个码组内为了纠正t个误码,要求最小码距应该满足: d>=2t+1

一个例子: 比如要对两个字符a和b进行编码:
1.只用一个bit进行编码,a = 0,b = 1,这时两个编码之间最小码距为1,没有检错纠错能力
2.用2个bit进行编码,a = 00,b = 11,这时两个编码之间最小码距为2,有1位检错能力
2.用3个bit进行编码,a = 000,b = 111,这时两个编码之间最小码距为3,有2位检错能力,或者1位纠错能力

4.2常用校验码

1)奇偶校验码:
在原编码基础上添加一位使得1的数量是奇数或偶数
2)海明码:
3)循环冗余(CRC): 在K位的数据后面,添加R位的校验位;
校验位的计算:
1.首先需要生成一个n位的二进制数A;
2.将原信息B左移n-1位,右面补n-1个0,得到二进制数C;
3.用C除以A得到n-1位的余数C,将C追加在原信息B的后面,得到二进制数D;

CRC验证:
只要用D除以A,如果余数为0,则校验通过

你可能感兴趣的:(编码)