字符编码(二)校验码
来源:互联网 发布:淘宝收藏店铺怎么设置 编辑:程序博客网 时间:2024/05/18 14:24
经典校验码: 奇偶校验码,海明校验码 和 循环冗余校验码(CRC)
都是对二进制的bit流而言
设原来数据有n位,要加入k位校验码.
1,奇偶校验码-奇校验码 和 偶校验码 的统称.
k=1
奇偶校验码最简单,但只能检测出“奇数”(比如3个,5个)位出错. 无法检测偶数位错误
奇校验
加上校验位后,编码中1的个数为 奇数个
偶校验
加上校验位后,编码中1的个数为 偶数个
例:
原编码 奇校验 偶校验
0000 0000 1 0000 0
0010 0010 0 0010 1
2,海明校验码-多重奇偶校验检错码
可以检测任何位出错,并能纠正1位错误
必须满足:pow(2,k)-1 >= n+k //pow(2,k) (代表2的k次方)
3,CRC即 循环冗余校验码--广泛应用于数据通信领域和磁介质存储系统中.
CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码.
CRC理论非常复杂,-关键是求“多项式g(x)”
在k位信息码后接r位校验码,对于一个给定的(n,k)码
可以证明(数学高手自己琢磨证明过程)存在一个最高次幂为 n-k=r 的多项式g(x)
根据g(x)可以生成k位信息的校验码,g(x)被称为 生成多项式
用C(x)=C(k-1)C(k-2)...C0表示k个信息位
把C(x)左移r位,就是相当于 C(x)*pow(2,r)
给校验位空出r个位来了.
给定一个 生成多项式g(x),可以求出一个校验位表达式r(x)
C(x)*pow(2,r) / g(x) = q(x) + r(x)/g(x)
用C(x)*pow(2,r)去除生成多项式g(x)商为q(x)余数是r(x)
所以有C(x)*pow(2,r) = q(x)*g(x) + r(x)
在CRC运算过程中,四则运算采用 mod 2运算(后面介绍),即不考虑进位和借位.
所以上式等价于C(x)*pow(2,r) + r(x) = q(x)*g(x)
C(x)*pow(2,r) + r(x)就是所求的n位CRC码,由上式可以看出它是生成多项式g(x)的倍式.
所以如果用得到的n位CRC码去除g(x)如果余数是0,就证明数据正确.
否则可以根据余数知道 出错位 .
- 字符编码(二)校验码
- 字符集与字符编码(二)
- python入门(二):字符的编码
- 字符编码(二)
- 常用校验码(奇偶校验码、海明校验码、CRC校验码)
- 常用校验码(奇偶校验码、海明校验码、CRC校验码)
- 常用校验码(奇偶校验码、海明校验码、CRC校验码)
- 常用校验码(奇偶校验码、海明校验码、CRC校验码)
- 常用校验码(奇偶校验码、海明校验码、CRC校验码)
- JAVA字符编码系列二
- 字符编码介绍(二)Unicode
- 计算机字符编码详解二
- CRC校验码的生成编码
- C++字符串完全指南 - Win32字符编码(二)
- C++字符串完全指南 - Win32字符编码(二)
- C++字符串完全指南 - Win32字符编码(二)
- C++字符串完全指南 - Win32字符编码(二)
- C++字符串完全指南 - Win32字符编码(二)
- 计算机基础(一)计算机硬件知识
- STL 优先队列的优先级
- 字符编码(一)原码、反码、补码
- [NSString alloc ] 涵义
- @property 和 @synthesize
- 字符编码(二)校验码
- 关于LNK2005的错误
- 论文素材 Yolo
- 字符编码(三) 字节序、bit序、 有效位
- obj c 画 图形 过程式开发
- 1057. 数零壹(20)
- Objective-c 面向对象画图形(此程序不符合内存管理规则)
- TCP/IP 协议簇学习
- C++11 std::bind std::function 变参函数