proszę zobaczyć doc pierwszy struct doc
struct.pack (FMT, V1, V2, ...)
Zwraca ciąg zawierający wartości v1, v2, ... pakowane zgodnie z podanym formatem. Argumenty muszą dokładnie odpowiadać wartościom wymaganym przez format.
-
struct.unpack (FMT, string)
Rozpakuj string (przypuszczalnie zapakowane przez paczka (fmt, ...)) zgodnie z podanym formatem. Rezultatem jest krotka , nawet jeśli zawiera dokładnie jeden element. Ciąg musi zawierać dokładnie ilość danych wymaganych przez format (len (ciąg) musi być równy calcsize (fmt)).
Ponieważ struct.pack
jest zdefiniowany jako struct.pack(fmt, v1, v2, ...)
. Przyjmuje listę argumentów niezawierających słów kluczowych (v1, v2, ...
, alias *args
), , więc struct.unpack
musi zwrócić listę obiektów, dlatego krotka.
Byłoby łatwo zrozumieć, jeśli wziąć pod uwagę pakiet jako
x = struct.pack(fmt, *args)
args = struct.unpack(fmt, x) # return *args
Przykład:
>>> x = struct.pack(">i", 1)
>>> struct.unpack(">i", x)
(1,)
>>> x = struct.pack(">iii", 1, 2, 3)
>>> struct.unpack(">iii", x)
(1, 2, 3)
Jeśli struktura zawiera więcej niż jeden przedmiot, to co zwrócisz? Generalnie najlepiej jest, jeśli funkcje zwracają tylko jeden typ (tak, że wywołujący nie musi mieć specjalnego przypadku w zależności od tego, czy jest jeden lub dwa elementy lub ...) – mgilson
Widzę ... Czy to jest jedyne/poprawne/Pythoniczne sposób na spakowanie/rozpakowanie * int *? – Jedi
W nowszych wersjach python znajduje się 'int.from_bytes' oraz' int.to_bytes' – mgilson