Bitte siehe doc erste struct doc
struct.pack (fmt, v1, v2, ...)
Return einen String, der die Werte enthält v1, v2, ... verpackt nach dem angegebenen Format. Die Argumente müssen genau die Werte entsprechen, die vom Format benötigt werden.
-
struct.unpack (fmt, string)
auspacken string (vermutlich durch Pack verpackt (fmt, ...)) entsprechend dem vorgegebenen Format. Das Ergebnis ist ein Tupel , auch wenn es genau ein Element enthält. Die Zeichenkette muss genau die Datenmenge enthalten, die für das Format benötigt wird (len (string) muss gleich calcsize (fmt) sein).
Da struct.pack
als struct.pack(fmt, v1, v2, ...)
definiert ist. Es akzeptiert eine nicht-keyworded Argumentliste (v1, v2, ...
, aka *args
), so struct.unpack
muss eine Liste wie Objekt, deshalb Tupel zurückgeben.
Es wäre leicht zu verstehen, wenn Sie Pack als
x = struct.pack(fmt, *args)
args = struct.unpack(fmt, x) # return *args
Beispiel betrachten:
>>> x = struct.pack(">i", 1)
>>> struct.unpack(">i", x)
(1,)
>>> x = struct.pack(">iii", 1, 2, 3)
>>> struct.unpack(">iii", x)
(1, 2, 3)
Wenn die Struktur mehr als ein Element enthält, was geben Sie zurück? Im Allgemeinen ist es am besten, wenn Funktionen nur einen einzigen Typ zurückgeben (so dass der Aufrufer keinen Sonderfall hat, je nachdem, ob es ein oder zwei Elemente gibt oder ...) – mgilson
Ich sehe ... Ist das das einzige/richtige/Pythonic Möglichkeit, ein * int * zu packen/entpacken? – Jedi
In neueren Python-Versionen gibt es 'int.from_bytes' und' int.to_bytes' – mgilson