二维码解密-第三部分
九游会客户端——2011年6月7日星期二
现在我们将介绍数据是如何编码的. 有几个步骤. 第一个, 选择了编码方法, 然后根据编码方法将原始数据转换为二进制数据, 然后应用误差校正算法, 然后数据被放入符号中. 最后选择并应用一个蒙版. 现在,我将介绍编码方法和二进制转换,其余内容稍后再讲.
在我继续讲之前, 我想指出的是,我们需要理解如何处理二进制数系统. 因为它很容易得到一个解释, 许多程序员已经熟悉它了, 我假设有这样的理解. 如果你需要一个解释或复习课程,试试 维基百科 或者谷歌搜索. 此外,我将提到向数据中添加位. 可以把它想象成一个比特流,这些比特随后将以正确的顺序放置在符号上. 稍后我会详细解释这是如何做到的, 但是现在, 想象一下你正在创造一个由1和0组成的链. 我可能会在一些位之间添加空格,以使它们更具可读性, 但它们不是二进制数据的一部分.
编码方法有数字、字母数字、二进制和汉字. 数字只支持0-9位,但只能以10位的形式存储其中3位. 字母数字支持字母A-Z(仅大写)、数字0-9和特殊字符$%*+-./:和空间. 它适合编码url和简单文本. 存储2个字母数字字符需要11位. 二进制数据每字符存储8位, 并支持扩展ASCII表中的256个字符. 汉字一个字符需要11位. 我不会详细介绍汉字, 因为我猜阅读本教程的人很少需要对日语进行编码. 所以如果你想,你就得将就一下罗马基或者去别的地方找细节.
以便用这些方法中的一种对数据进行编码, 我们首先指明我们使用的方法, 以及我们存储了多少数据. 我们用4位表示方法—数字为0001, 字母数字是0010, 二进制文件是0100, 汉字是1000. 编码方法决定了我们使用多少位来表示数据长度. 具体情况见表1. 作为一个例子, 如果我们将5个二进制字符编码为版本1符号, 我们开始的二进制数据将是0. (0100表示二进制,00000101是5的8位表示,表示数据长度.也可以使用不同的方法, 通过在先前的数据之后附加一个新的方法/大小指示器, 接下来是新数据. (换句话说,Method1, Size1, Data1, Method2, Size2, Data2)
一旦我们指出了要存储的内容,现在就该添加数据了. 二进制是最简单的——只需将字符的8位表示形式添加到数据中. 对于数字数据,取三位数的集合. 对于每一组3个,直接将它们编码为10位二进制表示, 所以你把“123456”编码为123后面跟着456. (00011110)如果在您的数据的末尾您有1位剩余, 将它编码为4位, 如果你还剩下两位数, 将它编码为7位. 字母数字数据稍微复杂一些. 您必须将每个字符转换为其数值—见表2. 然后取两对字符, 第一个数值乘以45, 把第二个数值相加. 然后将这对转换为11位二进制. 如果在数据末尾还剩下一个字符,那么将其值编码为6位. 例如,ABC将是(A=10*45=450) + (B=11) = 461和C=12. 461在11位二进制是00111001101,12在6位二进制是001100,所以00111001101001100.
在编码完所有数据后,如果还有剩余的空间,就需要添加一些填充. 首先,增加0000. 然后,如果数据中的比特数不能被8整除,就加0直到它被8整除. 然后交替添加“11101100”和“00010001”,直到达到版本和错误校正模式的限制(表3). 如果仅仅通过实际数据就达到了极限,那么这些都是不必要的.
错误校正相当复杂,所以我们将在下次讨论. 现在,我认为QR码使用Reed-Solomon纠错算法. 你可以在 维基百科. 之后,我将介绍模块和屏蔽系统的放置顺序. 如果你还没有,你肯定想看看本教程的前几部分- 第1部分 和 第2部分.
九游会客户端
九游会客户端是一家全方位服务的创意机构 网页设计, 打印, 身份, 品牌, 界面设计, 视频制作, 静止摄影 和 运动设计. 利用我们对卓越的热情,多元文化背景,还有 获奖 实践, 我们一直提供高质量的服务, 自定义, 以创新的解决方案满足客户多样化的市场需求. 欲了解更多信息,请访问 www.MatchaDesign.com.