二进制编码

二维码的生成细节和原理

房东的猫 提交于 2019-12-16 03:41:01
二维码的生成细节和原理 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就是一个密码算法,在此写一这篇文章 ,揭露一下。供好学的人一同学习之。 关于QR Code Specification,可参看这个PDF: http://raidenii.net/files/datasheets/misc/qr_code.pdf 基础知识 首先,我们先说一下二维码一共有40个尺寸。官方叫版本Version。Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。 下面我们看看一个二维码的样例: 定位图案 Position Detection Pattern是定位图案,用于标记二维码的矩形大小。这三个定位图案有白边叫Separators for Postion Detection Patterns

一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)

ぐ巨炮叔叔 提交于 2019-12-15 05:18:23
‘r’:只读。该文件必须已存在。 ‘r+’:可读可写。该文件必须已存在,写为追加在文件内容末尾。 ‘rb’:表示以二进制方式读取文件。该文件必须已存在。 ‘w’:只写。打开即默认创建一个新文件,如果文件已存在,则覆盖写(即文件内原始数据会被新写入的数据清空覆盖)。 ‘w+’:写读。打开创建新文件并写入数据,如果文件已存在,则覆盖写。 ‘wb’:表示以二进制写方式打开,只能写文件, 如果文件不存在,创建该文件;如果文件已存在,则覆盖写。 ‘a’:追加写。若打开的是已有文件则直接对已有文件操作,若打开文件不存在则创建新文件,只能执行写(追加在后面),不能读。 ‘a+’:追加读写。打开文件方式与写入方式和’a’一样,但是可以读。需注意的是你若刚用‘a+’打开一个文件,一般不能直接读取,因为此时光标已经是文件末尾,除非你把光标移动到初始位置或任意非末尾的位置。 另外注意:因为Windows操作系统默认字符编码为GBK,而Python默认Unicode.utf-8,如果不写“ encoding=‘utf-8’ "就会报错。 来源: CSDN 作者: 雪shan飞hu 链接: https://blog.csdn.net/weixin_39374967/article/details/103545572

HTTP基础原理与koa-bodyparser原理解析

戏子无情 提交于 2019-12-14 21:48:52
一、前置知识   在理解koa-bodyparser原理之前,首先需要了解部分HTTP相关的知识。 1、报文主体   HTTP报文主要分为请求报文和响应报文,koa-bodyparser主要针对请求报文的处理。   请求报文主要由以下三个部分组成: 报文头部 空行 报文主体   而koa-bodyparser中的body指的就是请求报文中的报文主体部分。 2、服务器端获取报文主体流程   HTTP底层采用TCP提供可靠的字节流服务,简单而言就是报文主体部分会被转化为二进制数据在网络中传输,所以服务器端首先需要拿到二进制流数据。   谈到网络传输,当然会涉及到传输速度的优化,而其中一种优化方式就是对内容进行压缩编码,常用的压缩编码方式有: gzip compress deflate identity(不执行压缩或不会变化的默认编码格式)   服务器端会根据报文头部信息中的Content-Encoding确认采用何种解压编码。   接下来就需要将二进制数据转换为相应的字符,而字符也有不同的字符编码方式,例如对于中文字符处理差异巨大的UTF-8和GBK,UTF-8编码汉字通常需要三个字节,而GBK只需要两个字节。所以还需要在请求报文的头部信息中设置Content-Type使用的字符编码信息(默认情况下采用的是UTF-8),这样服务器端就可以利用相应的字符规则进行解码,得到正确的字符串。

SQL server的字段类型详解

泪湿孤枕 提交于 2019-12-12 18:02:34
SQL server的字段类型详解 bit 整型 bit数据类型是整型,其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如Yes 或No、True 或False 、On 或Off. 注意:很省空间的一种数据类型,如果能够满足需求应该尽量多用。 tinyint 整型 tinyint 数据类型能存储从0到255 之间的整数。它在你只打算存储有限数目的数值时很有用。这种数据类型在数据库中占用1 个字节. 注意:如果bit类型太单调不能满足您的需求,您可以考虑用tinyint类型,因为这个类型相对也是比较安全的,不接受恶意脚本内容的嵌入。 smallint 整型 smallint 数据类型可以存储从- 2的15次幂(-32768)到2的15次幂(32767)之间的整数。这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。这种数据类型在数据库里占用2 字节空间. 注意:如果tinyint类型太单调不能满足您的需求,您可以考虑用smallint类型,因为这个类型相对也是比较安全的,不接受恶意脚本内容的嵌入。 int 整型 int 数据类型可以存储从- 2的31次幂(-2147483648)到2的31次幂 (2147483 647)之间的整数。存储到数据库的几乎所有数值型的数据都可以用这种数据类型。这种数据类型在数据库里占用4个字节. 注意

二维码生成细节和原理

拥有回忆 提交于 2019-12-12 13:12:31
二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就是一个密码算法,在此写一这篇文章 ,揭露一下。供好学的人一同学习之。 关于QR Code Specification,可参看这个PDF:http://raidenii.net/files/datasheets/misc/qr_code.pdf 基础知识 首先,我们先说一下二维码一共有40个尺寸。官方叫版本Version。Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。 下面我们看看一个二维码的样例: 定位图案 Position Detection Pattern是定位图案,用于标记二维码的矩形大小。这三个定位图案有白边叫Separators for Postion Detection Patterns。之所以三个而不是四个意思就是三个就可以标识一个矩形了。

2019-12-12 Java关键字、标识符、注释、常量和进制问题、变量和数据类型

空扰寡人 提交于 2019-12-12 01:16:04
1:关键字 (1)被Java语言赋予特定含义的单词 (2)特点: 全部小写。 (3)注意事项: A:goto和const作为保留字存在。 B:类似于Notepad++这样的高级记事本会对关键字有特殊颜色标记 2:标识符 (1)就是给类,接口,方法,变量等起名字的字符序列 (2)组成规则: A:英文大小写字母 B:数字 C:$和_ (3)注意事项: A:不能以数字开头 B:不能是java中的关键字 C:区分大小写 (4)常见的命名规则(见名知意) A:包 其实就是文件夹,用于把相同的类名进行区分 全部小写 单级包:小写 举例:liuyi,com 多级包:小写,并用.隔开 举例:cn.itcast,com.baidu B:类或者接口 一个单词:首字母大写 举例:Student,Demo 多个单词:每个单词首字母大写 举例:HelloWorld,StudentName C:方法或者变量 一个单词:首字母小写 举例:name,main 多个单词:从第二个单词开始,每个单词首字母大写 举例:studentAge,showAllNames() D:常量 全部大写 一个单词:大写 举例:PI 多个单词:大写,并用_隔开 举例:STUDENT_MAX_AGE 3:注释 (1)就是对程序进行解释说明的文字 (2)分类: A:单行注释 // B:多行注释 /**/ C:文档注释(后面讲) /** */

python文件操作

早过忘川 提交于 2019-12-10 17:24:39
在讲io操作的时候,先回忆一下冯诺依曼体系的计算机组成,分为五大构造, 输入设备,存储器,输出设备,运算器和控制器 。运算器和控制器合起来就是cpu。所有的数据都要先加载到内存。内存要多用,O要少用,要知道数据是在内存中怎么玩的,才能提高效率。 运算器:完成各种算数运算,逻辑运算,数据传输等数据加工处理。 控制器:控制程序的执行 存储器:用于记忆程序和数据,例如内存。 输入设备:将数据或者程序输入到计算机中,例如键盘,鼠标等。 输出设备:将数据或者程序的处理结果展示给用户,例如显示器,打印机等。 我们一般所说的IO操作,指的是 文件IO ,如果指的是网络IO,都会直接说网络IO。 使用Python来读写文件是一件非常简单的操作,使用 open()函数 来打开一个文件,获取到一个 文件句柄 ,然后通过文件句柄就可以进行各种各样的操作。当然根据打开方式的不同能够执行的操作也会有响应的差异。 文件IO常用操作包括:open(打开),read(读取),write(写入),close(关闭),readline(行读取),Readlines(多行读取),seek(文件指针操作),tell(指针位置) 而打开文件的方式:r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b,默认使用的是r(只读)模式。只读(r,rb),只写(w,wb),追加(a,ab)而+是读原模式的补充。

字符编码与解码

大城市里の小女人 提交于 2019-12-09 21:50:08
最近遇到一个关于字符编码与解码的问题,使用GB2312保存了一个文件,然后使用vscode打开的时候,发现中文字符全是乱码了。为什么会出现这个问题?研究了一下编码与解码。 文件在计算机上存储的都是二进制。顾名思义,编码就是把一个字符编码成二进制码存起来的方式,而解码就是把这个二进制码按照原本编码的规则还原成原来的字符。 我们经常使用的ASCII码,是上个世纪60年代美国制定的一套字符编码,它规定了英语字符与二进制位之间的关系,一直沿用至今。ASCII 码一共规定了128个字符的编码。ASCII使用一个字节来进行编码,一个字节有8个bit位,ASCII只使用了后面的7个bit位,最前面的一个bit位使用0填充。 一些欧洲国家发现ASCII编码的128个字符不能表示他们的语言的所有的字符,所以他们决定启用最前面的一位,这样一来,就可以编码256个字符了,比以前又多了128个字符可以使用。 但是又有问题出现了,不同的国家的字母不一样,他们启用最高位来进行编码,不同的语言有不同的编码方式,导致了同样的编码在不同的国家代表的字符不一样;例如法语中130代表é,但是在希腊语中代表的是ג。注意由于各个国家都是在美国制定的标准上来扩充ASCII的,他们都保留了美国人制定的标准,也就是说所有的字符编码中,0-127表示的符号是一样的,128-256表示的符号在各个国家制定的编码表中是不一样的

海明码校验程序设计

六月ゝ 毕业季﹏ 提交于 2019-12-09 14:23:38
1. 需求分析 (1)海明码编码: 输入:一串二进制数据串 输出:插入海明码后的二进制数据串 (2)海明码纠错: 输入:一串含海明码的二进制数据串 输出:通过海明码校验,检查该二进制串是否有错,若有错误,则对错误位进行纠错,将纠错后的二进制串输出。 2. 海明码校验原理分析 这里我们仅从编程实现的角度分析海明码的编码及纠错的实现算法,书本上采用的是矩阵相乘的方法,但矩阵相乘的方法程序执行效率不高,故通过在网上的搜索及自己的总结,得出如下的程序实现算法。 2.1 海明码编码的原理分析 编码步骤 (1) 根据信息位数,确定校验位数。 k—信息位数 r—校验位数 求出满足不等式的最小r,即为校验位数。 (2)计算校验位公式 特别注意: 校验位 r n所在位数为 2^n ,其余由信息位填充。 位数和信息位由1起始,而校验位由0起始。 将每个信息比特由位置对应的位数写成2的幂之和的形式。 例如I8对应的第十二位12=2^3+2^2 ,I7对应的第十一位11=2^3+2^1+2^0 ,I6对应的第十位10=2^3+2^1,I5对应的第九位9=2^3+2^0 一直写到对应的第三位。 校验位r n由前面位数写成2的幂之和中包含2 ^n的位数对应的信息为之和构成 例如r3=I8+I7+I6+I5 (3)求校验位。 根据计算公式求出各校验位。 (4) 求海明码 根据上面的表格填充后,写出海明码。 例

索引压缩

ⅰ亾dé卋堺 提交于 2019-12-08 18:35:06
当待搜索的数据量极为庞大时,数据所对应的索引的数据量也会非常大。就拿最常见的倒排索引来说,特别是当用户查询的关键词是常用词时,这些词所对应的倒排列表可以达到几百兆,而将这样庞大的索引由磁盘读入内存,势必会严重增加检索响应时间,影响用户的搜索体验。为了解决这样的问题,学者们提出了一系列的索引压缩技术。 实际上,我们所要处理的数据类型多如牛毛,根据不同的要求,为这些数据设计的索引更是千变万化,最常见的有倒排索引,复杂一点的还有各种树形索引等等。要想总结出一种万能的索引压缩技术,实在是很难。但是压缩方法的基本原理却是相通的。本文,我将以倒排索引为例,介绍几种简单的索引压缩技术。之所以选择倒排索引,除了它通用性强之外,也是由于其具有普遍性:倒排索引由以下两部分构成: 词典,其实就是由字符串构成的列表; 倒排列表,其实就是由一系列数字; 其他类型索引,不过都是由字符以及数字构成的,所以说从倒排索引的压缩也就能延伸出对于其他索引的压缩方法。 词典压缩 下表是一个典型的倒排索引,由单词;文档频率(DF);倒排列表指针;3个部分组成 其中,词典部分的存储会浪费空间的根本原因在于分配给单词的空间是统一的,也就是说不论你的单词是像”we”这样短的,还是像”confidentiality”这样长的,都必须分配能够容纳最长单词的空间。所以比较直接的压缩方法是将这些单词连续地存储在一个区域中