我有一个格式为msgHdr+payload
的网络消息。 msgHdr
有几个Longs和一些短裤。有效载荷是可变长度的文本。我不确定如何格式化Struct,以便我可以发送打包的二进制流。
单个邮件的格式为
s = struct.Struct('> L L I I 2110s')
s.pack(*mystruct) # Then I pack it
但是,这仅适用于2110的固定大小字符串。如何将其用于可变长度有效负载?我应该使用其他东西吗?
答案 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)
首先将标题创建为一个结构,然后是可变长度部分,然后连接它们可能会有所帮助。