Python 3.1 - 发送二进制打包消息变量长度数据

时间:2012-02-17 22:27:48

标签: python python-3.x

我有一个格式为msgHdr+payload的网络消息。 msgHdr有几个Longs和一些短裤。有效载荷是可变长度的文本。我不确定如何格式化Struct,以便我可以发送打包的二进制流。

单个邮件的格式为

s = struct.Struct('> L L I I 2110s')
s.pack(*mystruct) # Then I pack it

但是,这仅适用于2110的固定大小字符串。如何将其用于可变长度有效负载?我应该使用其他东西吗?

2 个答案:

答案 0 :(得分:1)

使用struct作为标题,然后添加有效负载。

message = struct.pack('> L L I I', *header) + payload

答案 1 :(得分:0)

好像你可以创建格式字符串(毕竟只是一个字符串),然后在你描述的情况下将它与s.pack一起使用。

如果您当前的语法是

s = struct.Struct('> L L I I 2110s')
s.pack(*mystruct)

您需要做的就是

s = struct.Struct('> L L I I %ds' % size_of_data)
s.pack(*mystruct)

首先将标题创建为一个结构,然后是可变长度部分,然后连接它们可能会有所帮助。