编码: 数值,文字和英文字符等在进入计算机时,都必须转化成二进制表示形式,称为字符编码.
ASCII : 美国标准信息交换码.
采用7个二进制位对字符编码, 其格式为为一个字符有一个编码.
每个字符占用一个字节, 用低七位编码,最高位为0。 共有128个编码. 编号从0~127
A: 0100 0001
a: 0110 0001
汉字编码
汉字处理包括汉子的编码输入,汉字的存储和汉字输出等环节,过程:
外部(输入)码 ---> 机内码 ----->字形(输出)码
1.输入码
数字码, 拼音码, 子形码
2. 内部码:
是汉字在信息处理系统内部存储,处理,传输汉字时用的代码
区位码:
是一种基于GB2312-80字符集(94行×94列)的输入码,
使用十进制表示其区码范围(01~94)和位码范围(01~94),各占两位,故每个汉字对应4位十进制数码(范围0101~9494)。
国标码
则用16进制表示两个字节 , 前后字节分别对应区位码的区码(加上32或20h)和位码(加上32或20h)
机内码也用16进制表示两个字节,将国标码的前后两个字节最高位置1
机内码
是内部存储处理汉字时使用的编码,用两个字节表示一个汉字,将国标码的两个字节高位置1 ,避免与ASCII码冲突;
以 '久' 为例子:
久的 区位码:3035 => ( 00011110 00100011B)
国标码(区码,位码加 32): 0001 1110 0010 0011
+ 0010 0000 0010 0011
= 0011 1110 0100 0011
机内码(将国标码最高位置1): 1011 1110 1100 0011
int main()
{
char a = '久';
printf("久(GB2312)转化为整数=%d",(int)a);
// char 占一个 , a存储的是 1100 0011(补码) ,
// 转化为原码 是 1011 1101
// 真值 -(32+16+8+4+0+1) = -61;
}
字形码
是汉字字形的字·模数据, 通常用点阵图,矢量函数等方式表示。是汉字的输入形式
校验码:
奇偶校验码:用于并行码的检查错
在k位数据码之外增加1位校验码,使k+1位为偶数(偶校验)或奇数(奇校验)
原数据 偶校验 奇校验
0001 1 0001 0 0001
海明码:用于多位并行数据检错纠错处理
1.