丹凤千字科普:空白昵称生成器快手(详细资料介绍)


丹凤千字科普:空白昵称生成器快手(详细资料介绍)  

【CSDN编者按】近年来,Rust语言已成为众多企业眼中的热门选择,无论是微软、亚马逊、Google等大型公司,还是Linux这样的主流项目,都在积极拥抱Rust。那么,对于普通开发者而言,该如何入门Rust呢?一个年仅15岁的开发者通过制作一个二维码编码器的项目来学习Rust编程语言,希望能对你有所启发。

未经允许,禁止转载!

作者:Timur Borisov 译者:关

大家好,我想和大家分享我是如何从零开始学习Rust编程的。为此,我选择了制作一个QR码编码器作为我的项目目标,并且得到了Pionir免费学校一位导师的帮助。

那么为什么我会选择Rust呢?

我想尝试一些新的东西,我以前只使用过简单的Python,没有使用过更低级、更复杂的语言;Rust这种语言看起来很有前途,也非常有趣。

我选择QR码编码器作为项目目标,主要是因为这个项目相对不复杂,可以让我熟悉Rust的基础知识。

由于我们的未来计划与二维码有关,我想从这个项目中学到如何运用位、矩阵、Rust及其库、Reed-Solomon算法和常见的纠错算法。

QR码,即快速反应码,是一种二维条形码,可以存储一些信息,借助特定的扫描工具,可以轻松地读取。QR码的优点在于其读取速度快、存储信息量大,并且使用Reed-Solomon算法,其纠错率高达30%。

要生成QR代码,需要经过以下步骤:数据编码、添加服务信息并填充、将信息分块、创建校正字节、组合区块以及在QR码上放置信息。

我对架构的设计

对于生成器的架构设计,我有多种想法,最终选择了我认为最简单易懂的一种。

我的架构分为四个层次:QrMatrix——主矩阵,由模块组成,可以通过坐标进行更改;DataBitvec——将位转换为位向量(二进制位组成的向量),并添加纠错功能后发送到DataEncoder;DataEncoder——该结构将在QrMatrix中使用ZigZagIt迭代器对数据进行编码;QrBuilder——作为fieldQrMatrix(矩阵域)的接收者,它将所有基本元素添加到其中,对信息进行编码并创建掩码。

这些基本结构在QrBuilder结构中相互作用,从而得到一个现成的QR码矩阵,最后只需显示QR码即可。

创建主矩阵 QrMatrix

一开始,我想创建自己的QrMatrix数据结构,它由Vec 组成,可以通过模块的坐标搜索功能完成所有更改。但我认为不值得从零开始创建,因此我选择了使用库generic-matrix。

通过引入size值,我们可以创建我们想要的任何大小的矩阵,并填充模块。模块中的预留功能块与普通信息分开,因此更方便,无法更改功能块。在我的结构中,我没有使用模块中的预留空间,因为在找到二维码的最佳掩码之前,信息块是不会被填满的。要更改矩阵中的模块,可以使用以下函数:

find_modules_in_matrix, change_module_in_matrix等。为了显示二维码,我使用了终端进行展示。这就是最终二维码的样子。插入FinderBuilder和TimingBuilder为了在二维码中生成搜索模式,我创建了一个数组形式的常量:由于总是有三种搜索模式,而且它们的初始坐标很容易计算,因此我认为直接在QrMatrix中生成它们没有意义。我只需要将常数FINDER_OCK旋转并完全插入特定坐标即可。创建同步车道要容易得多,因为它们的坐标总是已知的,长度也很容易求出。由于条纹总是以白色模块开始,因此每转一圈将值改为相反的值就可以得到一个具有同步条纹正确模块的矢量。建立DataEncoder要将某些内容编码成QR码必须先给定字符串转换成位向量为此需要接受不同字符的编码方式:数字编码只对数字进行编码每三个字符使用十个bit字母数字编码对大写拉丁字母数字$%+-./:等特殊字符和空格进行编码字节编码虽然信息密度较低但可以编码任何字符例如UTF-8中的字符其实还有韩和其他字符的汉字编码但我没有使用这种编码方式为了存储bit并方便使用我使用了bit_thing库此外为了方便处理信息我创建了一个QrCodeBitvec结构它包含三个字段一个用于存储服务信息的字段一个用于存储数据的字段和一个用于存储纠错字节的字段举个例子来说明这个系统是如何工作的我将数字1234编码成一个二维码首先你需要确定使用哪种类型的编码以及每行有多少个字符在这个示例中我们使用数字编码类型字符长度为4然后将其转换为BitVec 0这个示例的数字为 位数是十进制位数对于数字编码的字符长度为十个比特现在我们得到了这个基于以上我们有了长度为二十八位的BitVec但为了符合QR码的规范我们必须完整地填写数据所以在这种情况下我们需要填充BitVec直至长度为一百五十二位为此我们需要做三件事添加终止符用零填充四个位用零填充数据使其可以被八整除然后循环交替添加两个字节这些操作必须重复进行直到

  丹凤千字科普:空白昵称生成器快手(详细资料介绍)