任意基二进制到文本编码器(任意基到任意基)

basest的Python项目详细描述


最基本的python

python中任意基二进制到文本编码器(任意基到任意基)。

什么?

简而言之,basest是基于二进制到文本转换的概念的。即二进制或8位数据被转换或序列化为基于文本的表示格式,该格式可以安全地通过介质,否则将破坏或破坏二进制数据的含义。

这一概念在电子邮件、pdf格式和公钥密码等领域非常常用,仅举几个例子。

有许多不同的格式和方案可将二进制数据系列化为文本,采用不同的字母表大小和不同的可打印ascii字符,这些字符用于不同的原因。

也不仅仅是8位二进制数据可以串行化。如果可以确定两个符号之间的编码比并定义输入和输出符号,则声明为给定数字基数或字母大小的任何符号集合都可以序列化为任何其他符号。

这个库是我实现的一个通用的、基本到基本的转换器,它解决了最后一点。可以创建当前存在的每个二进制到文本格式的编码器和解码器,并与此库一起使用,只需要提供所需格式的详细信息。由于它的灵活性,这个库也使得发明新的有趣的基础到基础的序列化/转换格式变得很简单(我自己计划开发并发布一个将二进制文件转换成纯基于emoji格式的格式!)

库的一个限制是,它不能使用输入上的填充将数据从较小的输入基编码到较大的输出基(即,如果从基2编码到基1000,则需要确保输入符号的数量与使用的编码比率完全匹配)。这是一个公认的限制,因为实现一个填充系统的复杂性,该系统的工作方式与base-64和其他系统相同,但可以扩展到任何任意的基。

所以,我希望你觉得这个图书馆有趣,有用或两者兼有!

安装

支持的python版本

此库旨在与Python2.7Python3.3或更高版本一起工作。

它是针对python2.73.53.6pypy 3.5进行测试的。 < Buff行情>

:灯泡:需要帮助

如果您已经尝试过或者想要在任何其他python实现上尝试过,您的反馈将非常感谢!

如果您感兴趣,请打开问题

从pypi安装(首选)

pip install basest

从Git存储库安装(来自Development Branch的边缘拷贝)

pip安装git+git://github.com/saxbophone/basest python@development

用法

以下是此库中定义的接口的简要概述,介绍从何处导入以及如何使用这些接口。

有一个功能接口和一个基于类的接口(基于类的接口在功能接口的基础上,但将来也将用于添加其他功能)。

基于类的接口

要使用基于类的接口,需要创建basest.encoders.encoder的子类并重写类的属性,如下所示(以base64为例):

frombasest.encodersimportEncoderclassCustomEncoder(Encoder):input_base=256output_base=64input_ratio=3output_ratio=4# these attributes are only required if using decode() and encode()input_symbol_table=[chr(c)forcinrange(256)]output_symbol_table=[sforsin'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/']padding_symbol='='
< Buff行情>

注意:您必须子类化编码器,不能直接使用它!

编码器的子类具有以下可用的公共方法:

从一个基编码到另一个基

encode()将对类中的一组符号进行编码ol table转换为类"输出符号表"中的一组符号,观察所选的编码比率和填充符号。

encoder=CustomEncoder()encoder.encode(['c','a','b','b','a','g','e','s'])# -> ['Y', '2', 'F', 'i', 'Y', 'm', 'F', 'n', 'Z', 'X', 'M', '=']

原始编码

encode_raw()的工作原理与encode()类似,只是符号不被解释。相反,应该使用0->;(base-1)范围内的纯整数。基值用作填充符号。

encoder=CustomEncoder()encoder.encode_raw([1,2,3,4,5,6,7])# -> [0, 16, 8, 3, 1, 0, 20, 6, 1, 48, 64, 64]

从一个基解码到另一个基

decode()的工作方式与encode()完全相同,但相反。

encoder=CustomEncoder()encoder.decode(['Y','2','F','i','Y','m','F','n','Z','X','M','='])# -> ['c', 'a', 'b', 'b', 'a', 'g', 'e', 's']

解码原始文件

decode_raw()的工作原理与decode()类似,只是符号不被解释。相反,应该使用0->;(base-1)范围内的纯整数。基值用作填充符号。

encoder=CustomEncoder()encoder.decode_raw([0,16,8,3,1,0,20,6,1,48,64,64])# -> [1, 2, 3, 4, 5, 6, 7]

功能界面

从一个基编码到另一个基(其中要使用的编码比已知)

对于给定的输入基输入符号表输出基输出符号表输出填充输入比输出比和输入数据(由输入符号表中定义的项组成的iterable): 返回输入数据,使用指定的编码比率和符号表(以及提供的输出填充符号(如果需要)编码到指定的基中。 将输出数据作为保证位于输出符号表或输出填充符号中的项目列表返回。

importbasestbasest.core.encode(input_base=256,input_symbol_table=[chr(c)forcinrange(256)],output_base=64,output_symbol_table=[sforsin'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'],output_padding='=',input_ratio=3,output_ratio=4,input_data='falafel')# -> ['Z', 'm', 'F', 's', 'Y', 'W', 'Z', 'l', 'b', 'A', '=', '=']

原始编码

与上面的函数类似,basest.core.encode_raw将一个基编码为另一个基,但只接受并返回整数数组(例如,字节将作为0-255之间的整数传递,而不是作为byte对象)。因此,它省略了paddingsymbol table参数,但在函数和形式上与encode相同。

importbasestbasest.core.encode_raw(input_base=256,output_base=85,input_ratio=4,output_ratio=5,input_data=[99,97,98,98,97,103,101,115])# -> [31, 79, 81, 71, 52, 31, 25, 82, 13, 76]

从一个编码基解码到另一个编码基。

对于给定的输入基输入符号表输入填充输出基输出符号表输入比输出比和输入数据(由输入符号表中定义的项组成的iterable)返回输入数据,从其编码的基中解码。 将输出数据作为保证在输出符号表中的项目列表返回,不带填充。

< Buff行情>

这实际上与encode()相反

importbasestbasest.core.decode(input_base=64,input_symbol_table=[sforsin'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'],input_padding='=',output_base=256,output_symbol_table=[chr(c)forcinrange(256)],input_ratio=4,output_ratio=3,input_data='YWJhY3VzIFpaWg==')# -> ['a', 'b', 'a', 'c', 'u', 's', ' ', 'Z', 'Z', 'Z']

解码原始文件

与上面的函数类似,basest.core.decode_raw将从一个基址解码到另一个基址,但只接受并返回整数数组(例如,base64将作为0-65之间的整数(65表示填充符号),而不是str对象传递)。因此,它省略了paddingsymbol table参数,但在函数和形式上与decode相同。

importbasestbasest.core.decode_raw(input_base=85,output_base=256,input_ratio=5,output_ratio=4,input_data=[31,79,81,71,52,31,25,82,13,76])# -> [99, 97, 98, 98, 97, 103, 101, 115]

在给定范围内找到从一个基到任何基的最佳编码比

对于给定的输入基(例如基256/8位字节),给定的期望输出基(例如基94)给定的可接受输出基范围和考虑用于输入的块大小范围(输入量一次处理的字节/符号),返回要使用的最有效的输出基数和编码比率(以输入基数到输出基数的形式)。

返回包含整数作为第一项(表示最有效的输出基)和元组作为第二项(包含两个整数,表示输入基数与输出基数的比值。

frombasest.encodersimportEncoderclassCustomEncoder(Encoder):input_base=256output_base=64input_ratio=3output_ratio=4# these attributes are only required if using decode() and encode()input_symbol_table=[chr(c)forcinrange(256)]output_symbol_table=[sforsin'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/']padding_symbol='='
0

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将Map<String,String>传递给需要Map<String,Object>   java在循环中使用字符串而不是StringBuilder是否会造成内存损失?   jnlp如何更新java控制台JRE?   java更改、修改和重新打包CXFAPI源文件   JavaFXJava应用程序在Fedora上运行一段时间后关闭   使用来自不同类的方法的java   java如何通过ant脚本在linux中使用subst?   java在使用camunda modeler进行base64编码/解码时出错   获取java。netbeans、weblogic和fastswap设置为true时的lang.NoSuchMethodError   java如何提高FinalizerThread在GC中收集对象的优先级   java检测具有相同根的单词   netbeans crud应用程序中的java错误