繁体   English   中英

Python固定长度数据包

[英]Python Fixed Length Packet

我正在尝试为ATSC PSIP生成器在python中构建固定长度的数据包。 这可能很简单,但到目前为止,我似乎无法正常工作。 我正在尝试使用类似于以下内容的字段构建数据包:

table_id = 0xCB
syntax = 0b1
reserved = 0b11
table_ext = 0xFF

最终目标将是以下二进制文件

'1100101111111111111'

我尝试了十几种不同的方法,但无法获得预期的结果。 我将通过套接字发送此消息,因此我认为它需要以字符串结尾。

您可以使用struct模块从任意布局构建二进制字符串。

那只能生成字节对齐的结构,但是无论如何,您都需要字节对齐才能在网络套接字上发送。

编辑:

因此,您生成的格式确实有未对齐的位8-1-1-2-12-16等。

为了在套接字上发送,您需要按字节对齐,但是我猜想协议会以某种方式处理它。 (也许在某处有填充位?)

我的新建议是建立一个位串,然后将其切成8位块并从那里转换:

input_binary_string = "110010111111111111101010" ## must be a multiple of 8
out = []
while len(input_binary_string) >= 8:
    byte = input_binary_string[:8]
    input_binary_string = input_binary_string[8:]
    b = int(byte,2)
    c = chr(b)
    out.append(c)
## Better not have a bits left over
assert len(input_binary_string) == 0
outString = "".join(out)

print [ ord(c) for c in out ]

Construct( http://construct.readthedocs.org/en/latest/ )是二进制数据的解析器和生成器。 它看起来确实是此应用程序的理想选择,因为您可以从位和字节定义内容。 它还看起来具有有用的功能,例如处理条件情况以及轻松检查终止符等。

我花了多年的时间来使用一个复杂的数据包创建和解析系统,该系统没有Construct所具有的某些功能,因此,除非协议中有特别奇怪的地方,否则看起来Construct可以处理它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM