使用以太坊RLP编码的MessagePack(反)序列化程序

msgpack-rlp-python的Python项目详细描述


这个库使用msgpack的修改版本来编码和解码二进制文件。 数据根据以太坊RLP规范这里https://github.com/ethereum/wiki/wiki/RLP

这是这个库的第一个版本,很可能仍然存在bug。使用风险自负。

安装

$ pip install msgpack-rlp-python

用法

rlp没有指定变量类型,因此所有编码的数据都被解码为bytestring表示。 为了指定变量类型,我们使用sedes。sedes是一种表达方式 程序你期望从编码的数据中得到什么样的变量类型。在这个版本中 支持的sede只有2个:字节(由整数0表示)和整数(由整数1表示)。这些沉淀物也可以 在列表或嵌套列表中。以显示sede位于列表中或嵌套中 列表,我们使用标准的python列表表示法。见下文。

  • 默认情况下,所有列表都将解码为元组。要解码到列表集,请使用list=true
  • sedes只在解码时使用。这个库足够聪明,可以知道正在编码的变量类型,并将它们正确地转换为rlp规范。
  • 这意味着它是msgpack的替代品。所以要导入的包仍然称为msgpack。

sedes示例:

var = b'\x01'
sede = 0 # A bytestring

var = 12381239
sede = 1 # An integer

var = [b'\x01', b'\x02', b'\x03', b'\x04']
sede = [0] # A list of bytestrings

var = [12312,1234,213412,213421]
sede = [1] # A list of integers

var = [b'\x01', [12312,1234]]
sede = [0,[1]] # Different types, and nested lists

不含sedes的示例用法。这将始终解码为bytestrings。

>>> importmsgpack>>> msgpack.packb([1,2,3])'b'\xc3\x01\x02\x03''
>>> msgpack.unpackb(_)(b'\x01', b'\x02', b'\x03')

>>> msgpack.packb([1,2,3])'b'\xc3\x01\x02\x03''
>>> msgpack.unpackb(_,use_list=True)[b'\x01', b'\x02', b'\x03']

使用sedes的示例。这将解码为您从中编码的变量类型。

>>> importmsgpack>>> msgpack.packb([1,2,3])'b'\xc3\x01\x02\x03''
>>> msgpack.unpackb(_)(b'\x01', b'\x02', b'\x03')

>>> msgpack.packb([1,2,3])'b'\xc3\x01\x02\x03''
>>> msgpack.unpackb(_,sedes=[1],use_list=True)[1, 2, 3]

>>> msgpack.packb([b'\x01',[12312,1234]])b'\xc8\x01\xc6\x820\x18\x82\x04\xd2'
>>> msgpack.unpackb(_,sedes=[0,[1]],use_list=True)[b'\x01', [12312, 1234]]

>>> msgpack.packb([b'\x01',[12312,1234]])b'\xc8\x01\xc6\x820\x18\x82\x04\xd2'
>>> msgpack.unpackb(_,sedes=[0,[1]],use_list=True)[b'\x01', [12312, 1234]]

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

推荐PyPI第三方库


热门话题
java Kafka producer大量内存使用(泄漏?)   java NullPointerException。。。正在插入数据但无法检索数据[Mysql DB]   java spring+jpa+hibernate=没有可用于当前线程的实际事务的EntityManager无法可靠地处理“persist”调用   getelementbyid在没有ID的情况下如何在java中使用GetElementsById   java有没有一种使用WatchService强制轮询的方法?   java将值从jframe传递给另一个jframe并使用它   Java/Groovy中带重试的反应式事件处理   具有两个包装器元素的java Jackson XML ArrayList输出   java总是在范围内使用不同的随机元素   取消选择java下拉列表值   多线程如何在Java中为对象的不同成员拥有不同的同步块   java如何使用多线程从文本文件中读取输入   java Spring启动附加崩溃命令   java使用公共或单独的actionPerfomed方法有什么区别   java用Spring3.0中的SpEL替换JSP中的EL   java作为windows服务运行应用程序时无法访问共享文件夹   java xml 1.1规范中的“解析数据”是什么意思?   以编程方式设置JComboBox索引时java触发ItemListener   java Android WebView:只加载HTML,不加载JS或CSS(在某些设备中)   Java:计算do/while循环的数量