struct python格式的字符串动态地长度

时间:2017-01-02 08:55:46

标签: python python-2.7 struct

我想使用struct并打包一个字符串和一个数字。 所以我看到的格式是' 10s' 10个字节, 但是如果我想要任何其他长度的字符串,我该如何写? 我不能告诉它10.我应该以格式写什么? 有办法做这个动态吗?

packed=struct.pack('i10s',1,"abaBaabb");

感谢

编辑:

如果我不知道我得到的包的大小 - 只是它是int int和string .. 如何写unpack:

id, data= struct.unpack_from('is' ,message,0)

只会获得一个字符 但如果我写:

id, data= struct.unpack_from('i500s' ,message,0)

因为我知道它将持续到500字节 如果字符串较小则会出错。

我该怎么办?

或 - 如何获得以下0 \ 00 \ 00 \ 00 \ 0的芦苇:

  

abcabcabcabcabcabcabcabcabcabcabcabc   abcabcabcabcabcabcabcabcabcabcabcabc   \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00

如果我得到这样的字符串?

1 个答案:

答案 0 :(得分:1)

最简单的方法是动态计算格式字符串:

struct.pack("%ss" % 3, "xyz")

foo = "bar"
struct.pack("%ss" % len(foo), foo)