struct.pack()

时间:2016-10-28 00:33:59

标签: python python-2.7 python-3.x struct

我想了解结构如何工作?

我有两个困惑:

struct与*和**或* args和** kwargs有什么不同?我应该在哪里使用struct,我应该在哪里使用*和**?

我的代码是:

 list(b'stackoverflow')
[115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]

第二个疑问是假设有人发给我这个代码:

 [115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]

我必须在解压缩后阅读它,所以一般的方式是:

>>> struct.pack(b'bbbbbbbbbbbbb',115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119)

但我想我的判决太长了,我不想添加许多" bbbbbb"作为参数,我如何使用自动检测句子长度的东西?

之类的东西
struct.pack(b'*magic',115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119)
我们能做到吗?

1 个答案:

答案 0 :(得分:1)

struct模块与参数传递无关,所以我无法猜测你在第一部分中提出的问题。

关于第二个问题,您不应该为此目的使用struct。你想要的是一个bytes对象,对应于小整数列表,这很容易得到:

>>> somelist = [115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]
>>> bytes(somelist)
b'stackoverflow'

如果由于某种原因您决定使用struct.pack代替此目的,那么这是最简单的方法:

>>> struct.pack("b" * len(somelist), *somelist)
b'stackoverflow'