2012-02-17 17 views
0

我有一个格式为msgHdr+payload的网络消息。 msgHdr有几条龙和几条短裤。 Payload是一个可变长度的文本。我不知道如何格式化Struct,以便我可以发送打包的二进制流。Python 3.1 - 发送二进制打包消息 - 可变长度数据

单个邮件的格式,

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

然而,这只是作品的2110一个固定大小的字符串如何使用它的一个可变长度的有效载荷?我应该使用别的东西吗?

回答

1

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

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

谢谢!它的作品很有魅力。 – shaks 2012-02-17 23:01:56

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) 

这可能有助于首先创建的标题为一体的结构,那么可变长度部分,然后串联他们。