Python定长P

2024-09-30 12:17:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python为atscpsip生成器构建一个固定长度的包。这可能很简单,但到目前为止,我似乎不能让它发挥作用。我正在尝试构建一个包含类似以下字段的包:

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

最终目标是二进制的

^{pr2}$

我尝试了十几种不同的方法,但都没有达到预期的效果。 我将通过套接字发送这个,所以我认为它需要以字符串结尾。在


Tags: 方法字符串id结尾table二进制extsyntax
2条回答

您可以使用^{} module从任意布局构建二进制字符串。在

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

编辑:

所以你生成的格式确实有不对齐的位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似乎可以处理它。在

相关问题 更多 >

    热门问题