与二进制数据解析和转录相关的功能。

cs.binar的Python项目详细描述


与二进制数据解析和转录相关的功能。

注意:此模块需要Python3,建议使用Python3.6+ 因为它使用abc.abc,因为python 2 bytes对象也是 弱(只是一个str)还有我的cs.py3.bytes黑客类和 因为基于关键字的包初始化受益于 关键字参数排序。

在下面的描述中,我用"chunk"这个词来表示一个片段 遵循缓冲协议的二进制数据,几乎总是 字节实例或内存视图,但原则上也是 例如bytearray

该模块中的类支持对二进制数据的简单解析 结构。

本模块中的函数和类包括:

  • packetfield:二进制字段的抽象类,具有 工厂方法来解析它,一种转录方法来转录 它以二进制形式返回,通常是一个.value属性 保持解析值。
  • 常见基本类型的几个假定子类 作为uint32be(无符号32位大端整数)。
  • 结构字段:为 struct使用单个值字段格式化。
  • 多结构字段结构元组:制造工厂 packetfields fromstruct多值格式 领域; structuple生成packetfields这些字段也是namedtuples, 支持对解析值的简单访问。
  • :用于分析多个 将packetfields放入一个更大的结构中 领域。 对于复杂结构,字段本身可以是packets。

您不需要只从二进制数据生成字段;因为 packetfield.\uu init\u接受后解析值,也可以 从头开始构造packetfield 将得到的二进制形式转录出来。

每个packetfield子类都有以下方法:

  • 转录:轻松返回此字段的二进制转录, 或者直接作为一个块(或者为了方便,也没有或者 ascii str)或通过产生连续的二进制数据。
  • from_buffer:从 cs.buffer.cornucopybuffer
  • from_bytes:从具有 可选的起始偏移量;这是 来自缓冲区

听起来有点神秘,但我们也提供:

  • 扁平化:从任意 转录方法并生成块,因此将数据包复制到 文件或其他地方总是可以通过遍历 扁平化(field.transcribe())或通过便利 field.transcribe_flat()方法,它调用flatten本身。
  • 对于解析任何 几乎可以来自任何来源的数据块。 它有许多便利的工厂,包括: 从字节,从块中生成缓冲区; 从文件描述符生成缓冲区; 从文件,从类似文件的对象生成缓冲区; 在mmap中,使用 文件的内存映射(mmap 可以使用文件本身作为备份存储,而不是分配 复制记忆。 请参见cs.buffer模块了解更多详细信息。

分析复杂结构时 必须在子类化packetfieldpacket之间进行选择。 有效的指标是子结构的程度。

a设计用于较深结构; 它的所有属性都是他们自己packetfields (或数据包,它们是数据包字段子类)。 这个层次结构的左边将是packetfields, 其属性为普通类型。

相比之下,packetfield的属性是"平面"值: 简单的后解析值,如astr或aint 或者其他一些传统的python类型。

packetfield的基本情况 是一个这样的值,名为。value, 以及自然实现 是提供一个.value\from_buffer方法 它返回基本的单个值 以及相应的"转录值"方法。 返回或放弃其二进制形式 (直接或分别成片)。

然而, 你可以用这个类处理多个属性 而是实现:

  • \uu init\ux:从后解析值组成实例 (因此从零开始而不是从现有的二进制数据中解析)
  • from_buffer:分析值的类方法 从aCornucopyBuffer调用类构造函数
  • 转录:返回或产生属性的二进制形式

卡梅隆·辛普森cs@cskk.id.au2018年7月22日

bsdata

mro:包装字段abc.abc
一个运行长度编码的数据块,其长度编码为bsuint。

bssfloat

mro:包装字段abc.abc
转录为str(float)的bsstring的浮点。

bsstring

mro:包装字段abc.abc
一个运行长度编码的字符串,其长度编码为bsuint。

bsuint

mro:包装字段abc.abc
二进制序列的无符号整数。

这使用一个大端字节编码,其中连续八位字节 把它们的高位设置好。产生该值的位 是低阶的7位。

bytesesfield

mro:包装字段abc.abc
包含字节块列表的字段。

定义了以下属性:

  • :作为字节实例列表收集的数据, 如果字段是用discard\u datatrue收集的,则为None。
  • 偏移量:数据的起始偏移量。
  • 结束偏移量:数据的结束偏移量。

偏移量结束偏移量值在 解析,如果字段的内容是 改变了

bytesfield

mro:包装字段abc.abc
字节字段。

bytesrunfield

mro:包装字段abc.abc
包含单个字节值连续运行的字段。

定义了以下属性:

  • 长度:运行的长度
  • 字节值:重复的字节值

属性是在每次引用时动态计算的 并返回遵循缓冲区协议的值:字节或 MemoryView对象。

emptypacketfield

mro:包装字段abc.abc
空数据字段,用作可选的占位符 字段不存在时。

singletonemptyfield是一个预定义的实例。

函数固定字节字段(长度,类名=无)

由固定长度字节字符串生成的bytesfield子类的工厂。

函数展平(块)

扁平化为一个可数个字节实例。

它允许子类方法轻松返回ascii 字符串、字节或iterables,甚至none,依次允许 它们只是返回超类的块迭代器 直接打开而不必打开。

float64be

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'>;d'

float64le

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'<;d'

int16be

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'>;h'

int16le

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'<;h'

int32be

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'>;l'

int32le

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'<;l'

listfield

mro:包装字段abc.abc
一个字段,它是其他字段的列表。

函数多结构字段(结构格式,子值名称=无,类名称=无)

packetfield子类的工厂围绕复杂的结构格式构建。

参数:

  • 结构格式:结构格式字符串
  • 子值名称:可选的名称双字段名称列表; 如果提供,则字段值将是 这些名称
  • 类名:生成类的选项名

数据包

mro:包装字段abc.abc
从二进制数据派生的复合对象的基类。

packetfield

mro:abc.abc
单个数据包字段的记录。

函数结构字段(结构格式,类名)

packetfield子类的工厂是围绕单个结构格式构建的。

参数:

  • 结构格式:结构格式字符串,指定 单个结构字段
  • 类名:生成的类的类名

示例:

>>> UInt16BE = struct_field('>H', class_name='UInt16BE')
>>> UInt16BE.__name__
'UInt16BE'
>>> UInt16BE.format
'>H'
>>> UInt16BE.struct   #doctest: +ELLIPSIS
<Struct object at ...>
>>> field, offset = UInt16BE.from_bytes(bytes((2,3,4)))
>>> field
UInt16BE(515)
>>> offset
2
>>> field.value
515

函数结构元组(类名、结构格式、子值名)

多结构字段的方便包装。

uint16be

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'>;h'

uint16le

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'<;h'

uint32be

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'>;l'

uint32le

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'<;l'

uint64be

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'>;q'

uint64le

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'<;q'

uint8

mro:包装字段abc.abc
一个packetfield,它解析并转录结构格式'b'

utf8nulfield

mro:包装字段abc.abc
以NUL结尾的UTF-8字符串。

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

推荐PyPI第三方库


热门话题
与SpringJPA相比,JavaHazelcast内存数据网格非常慢   java如何从Netbeans从命令行创建的ant项目运行单个junit测试?   java多个eclipse概要文件   java集合存储值还是引用?   java从两个自定义对象列表中删除公共元素   java密钥库、HttpClient和HTTPS:有人能给我解释一下这段代码吗?   java使用Appengine中的域别名帐户发送电子邮件   java如何在安卓中获得用户定义的“设备名称”?   java错误:包com。太阳工具。javac。util不存在   导出后Java Eclipse项目出现问题   组织。openqa。硒。WebDriverException:java。网ConnectException:无法连接到本地主机/0:0:0:0:0:0:0   java在字符串中追加文本   java在Pig中按名称获取字段?   java如何打印播放中对象的值   Java静态修饰符对运行时性能有积极影响吗?   Java计时器   java是否值得线程化一个需要1秒才能完成的操作?