blob: 12d4fbcd52bc4c8e5b2bc97d1971065ce2f74d46 [file] [log] [blame]
Benjamin Peterson4ae19462008-07-31 15:03:40 +00001:mod:`struct` --- Interpret bytes as packed binary data
Georg Brandl7f01a132009-09-16 15:58:14 +00002=======================================================
Georg Brandl116aa622007-08-15 14:28:22 +00003
4.. module:: struct
Benjamin Peterson4ae19462008-07-31 15:03:40 +00005 :synopsis: Interpret bytes as packed binary data.
Georg Brandl116aa622007-08-15 14:28:22 +00006
7.. index::
8 pair: C; structures
9 triple: packing; binary; data
10
11This module performs conversions between Python values and C structs represented
Mark Dickinson6abf1822010-04-12 21:00:59 +000012as Python :class:`bytes` objects. This can be used in handling binary data
13stored in files or from network connections, among other sources. It uses
14:ref:`struct-format-strings` as compact descriptions of the layout of the C
15structs and the intended conversion to/from Python values.
16
17.. note::
18
19 By default, the result of packing a given C struct includes pad bytes in
20 order to maintain proper alignment for the C types involved; similarly,
21 alignment is taken into account when unpacking. This behavior is chosen so
22 that the bytes of a packed struct correspond exactly to the layout in memory
Mark Dickinsoncb532f12010-06-15 08:42:37 +000023 of the corresponding C struct. To handle platform-independent data formats
Senthil Kumaran916bd382010-10-15 12:55:19 +000024 or omit implicit pad bytes, use ``standard`` size and alignment instead of
25 ``native`` size and alignment: see :ref:`struct-alignment` for details.
Mark Dickinson6abf1822010-04-12 21:00:59 +000026
Georg Brandlf30132f2014-10-31 09:46:41 +010027Several :mod:`struct` functions (and methods of :class:`Struct`) take a *buffer*
28argument. This refers to objects that implement the :ref:`bufferobjects` and
29provide either a readable or read-writable buffer. The most common types used
30for that purpose are :class:`bytes` and :class:`bytearray`, but many other types
31that can be viewed as an array of bytes implement the buffer protocol, so that
32they can be read/filled without additional copying from a :class:`bytes` object.
33
34
Mark Dickinson6abf1822010-04-12 21:00:59 +000035Functions and Exceptions
36------------------------
Georg Brandl116aa622007-08-15 14:28:22 +000037
38The module defines the following exception and functions:
39
40
41.. exception:: error
42
Mark Dickinson6abf1822010-04-12 21:00:59 +000043 Exception raised on various occasions; argument is a string describing what
44 is wrong.
Georg Brandl116aa622007-08-15 14:28:22 +000045
46
47.. function:: pack(fmt, v1, v2, ...)
48
Mark Dickinsonfdb99f12010-06-12 16:30:53 +000049 Return a bytes object containing the values *v1*, *v2*, ... packed according
50 to the format string *fmt*. The arguments must match the values required by
51 the format exactly.
Georg Brandl116aa622007-08-15 14:28:22 +000052
53
54.. function:: pack_into(fmt, buffer, offset, v1, v2, ...)
55
Mark Dickinsonfdb99f12010-06-12 16:30:53 +000056 Pack the values *v1*, *v2*, ... according to the format string *fmt* and
57 write the packed bytes into the writable buffer *buffer* starting at
Georg Brandlf30132f2014-10-31 09:46:41 +010058 position *offset*. Note that *offset* is a required argument.
Georg Brandl116aa622007-08-15 14:28:22 +000059
Georg Brandl116aa622007-08-15 14:28:22 +000060
Mark Dickinsonfdb99f12010-06-12 16:30:53 +000061.. function:: unpack(fmt, buffer)
Georg Brandl116aa622007-08-15 14:28:22 +000062
Mark Dickinsonfdb99f12010-06-12 16:30:53 +000063 Unpack from the buffer *buffer* (presumably packed by ``pack(fmt, ...)``)
64 according to the format string *fmt*. The result is a tuple even if it
65 contains exactly one item. The buffer must contain exactly the amount of
66 data required by the format (``len(bytes)`` must equal ``calcsize(fmt)``).
Georg Brandl116aa622007-08-15 14:28:22 +000067
68
Georg Brandl7f01a132009-09-16 15:58:14 +000069.. function:: unpack_from(fmt, buffer, offset=0)
Georg Brandl116aa622007-08-15 14:28:22 +000070
Mark Dickinsonfdb99f12010-06-12 16:30:53 +000071 Unpack from *buffer* starting at position *offset*, according to the format
72 string *fmt*. The result is a tuple even if it contains exactly one
73 item. *buffer* must contain at least the amount of data required by the
74 format (``len(buffer[offset:])`` must be at least ``calcsize(fmt)``).
Georg Brandl116aa622007-08-15 14:28:22 +000075
Georg Brandl116aa622007-08-15 14:28:22 +000076
Antoine Pitrou9f146812013-04-27 00:20:04 +020077.. function:: iter_unpack(fmt, buffer)
78
79 Iteratively unpack from the buffer *buffer* according to the format
80 string *fmt*. This function returns an iterator which will read
81 equally-sized chunks from the buffer until all its contents have been
82 consumed. The buffer's size in bytes must be a multiple of the amount
83 of data required by the format, as reflected by :func:`calcsize`.
84
85 Each iteration yields a tuple as specified by the format string.
86
87 .. versionadded:: 3.4
88
89
Georg Brandl116aa622007-08-15 14:28:22 +000090.. function:: calcsize(fmt)
91
Mark Dickinsonfdb99f12010-06-12 16:30:53 +000092 Return the size of the struct (and hence of the bytes object produced by
93 ``pack(fmt, ...)``) corresponding to the format string *fmt*.
Georg Brandl116aa622007-08-15 14:28:22 +000094
Mark Dickinson6abf1822010-04-12 21:00:59 +000095.. _struct-format-strings:
96
97Format Strings
98--------------
99
100Format strings are the mechanism used to specify the expected layout when
Mark Dickinsoncfd56f22010-06-12 18:37:54 +0000101packing and unpacking data. They are built up from :ref:`format-characters`,
102which specify the type of data being packed/unpacked. In addition, there are
103special characters for controlling the :ref:`struct-alignment`.
104
105
106.. _struct-alignment:
107
108Byte Order, Size, and Alignment
109^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
110
111By default, C types are represented in the machine's native format and byte
112order, and properly aligned by skipping pad bytes if necessary (according to the
113rules used by the C compiler).
114
115Alternatively, the first character of the format string can be used to indicate
116the byte order, size and alignment of the packed data, according to the
117following table:
118
Mark Dickinsoncb532f12010-06-15 08:42:37 +0000119+-----------+------------------------+----------+-----------+
120| Character | Byte order | Size | Alignment |
121+===========+========================+==========+===========+
122| ``@`` | native | native | native |
123+-----------+------------------------+----------+-----------+
124| ``=`` | native | standard | none |
125+-----------+------------------------+----------+-----------+
126| ``<`` | little-endian | standard | none |
127+-----------+------------------------+----------+-----------+
128| ``>`` | big-endian | standard | none |
129+-----------+------------------------+----------+-----------+
130| ``!`` | network (= big-endian) | standard | none |
131+-----------+------------------------+----------+-----------+
Mark Dickinsoncfd56f22010-06-12 18:37:54 +0000132
133If the first character is not one of these, ``'@'`` is assumed.
134
135Native byte order is big-endian or little-endian, depending on the host
136system. For example, Intel x86 and AMD64 (x86-64) are little-endian;
137Motorola 68000 and PowerPC G5 are big-endian; ARM and Intel Itanium feature
138switchable endianness (bi-endian). Use ``sys.byteorder`` to check the
139endianness of your system.
140
141Native size and alignment are determined using the C compiler's
142``sizeof`` expression. This is always combined with native byte order.
143
Mark Dickinsoncb532f12010-06-15 08:42:37 +0000144Standard size depends only on the format character; see the table in
145the :ref:`format-characters` section.
Mark Dickinsoncfd56f22010-06-12 18:37:54 +0000146
147Note the difference between ``'@'`` and ``'='``: both use native byte order, but
148the size and alignment of the latter is standardized.
149
150The form ``'!'`` is available for those poor souls who claim they can't remember
151whether network byte order is big-endian or little-endian.
152
153There is no way to indicate non-native byte order (force byte-swapping); use the
154appropriate choice of ``'<'`` or ``'>'``.
155
Mark Dickinsoncfd56f22010-06-12 18:37:54 +0000156Notes:
157
158(1) Padding is only automatically added between successive structure members.
159 No padding is added at the beginning or the end of the encoded struct.
160
161(2) No padding is added when using non-native size and alignment, e.g.
162 with '<', '>', '=', and '!'.
163
164(3) To align the end of a structure to the alignment requirement of a
165 particular type, end the format with the code for that type with a repeat
166 count of zero. See :ref:`struct-examples`.
167
168
169.. _format-characters:
Mark Dickinson6abf1822010-04-12 21:00:59 +0000170
171Format Characters
172^^^^^^^^^^^^^^^^^
173
Georg Brandl116aa622007-08-15 14:28:22 +0000174Format characters have the following meaning; the conversion between C and
Mark Dickinson719e4e32010-06-29 20:10:42 +0000175Python values should be obvious given their types. The 'Standard size' column
176refers to the size of the packed value in bytes when using standard size; that
177is, when the format string starts with one of ``'<'``, ``'>'``, ``'!'`` or
178``'='``. When using native size, the size of the packed value is
179platform-dependent.
Georg Brandl116aa622007-08-15 14:28:22 +0000180
Georg Brandl60203b42010-10-06 10:11:56 +0000181+--------+--------------------------+--------------------+----------------+------------+
182| Format | C Type | Python type | Standard size | Notes |
183+========+==========================+====================+================+============+
184| ``x`` | pad byte | no value | | |
185+--------+--------------------------+--------------------+----------------+------------+
186| ``c`` | :c:type:`char` | bytes of length 1 | 1 | |
187+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000188| ``b`` | :c:type:`signed char` | integer | 1 | \(1),\(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000189+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000190| ``B`` | :c:type:`unsigned char` | integer | 1 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000191+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000192| ``?`` | :c:type:`_Bool` | bool | 1 | \(1) |
Georg Brandl60203b42010-10-06 10:11:56 +0000193+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000194| ``h`` | :c:type:`short` | integer | 2 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000195+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000196| ``H`` | :c:type:`unsigned short` | integer | 2 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000197+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000198| ``i`` | :c:type:`int` | integer | 4 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000199+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000200| ``I`` | :c:type:`unsigned int` | integer | 4 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000201+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000202| ``l`` | :c:type:`long` | integer | 4 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000203+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000204| ``L`` | :c:type:`unsigned long` | integer | 4 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000205+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000206| ``q`` | :c:type:`long long` | integer | 8 | \(2), \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000207+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000208| ``Q`` | :c:type:`unsigned long | integer | 8 | \(2), \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000209| | long` | | | |
210+--------+--------------------------+--------------------+----------------+------------+
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200211| ``n`` | :c:type:`ssize_t` | integer | | \(4) |
Georg Brandl60203b42010-10-06 10:11:56 +0000212+--------+--------------------------+--------------------+----------------+------------+
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200213| ``N`` | :c:type:`size_t` | integer | | \(4) |
214+--------+--------------------------+--------------------+----------------+------------+
215| ``f`` | :c:type:`float` | float | 4 | \(5) |
216+--------+--------------------------+--------------------+----------------+------------+
217| ``d`` | :c:type:`double` | float | 8 | \(5) |
Georg Brandl60203b42010-10-06 10:11:56 +0000218+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000219| ``s`` | :c:type:`char[]` | bytes | | |
Georg Brandl60203b42010-10-06 10:11:56 +0000220+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000221| ``p`` | :c:type:`char[]` | bytes | | |
Georg Brandl60203b42010-10-06 10:11:56 +0000222+--------+--------------------------+--------------------+----------------+------------+
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200223| ``P`` | :c:type:`void \*` | integer | | \(6) |
Georg Brandl60203b42010-10-06 10:11:56 +0000224+--------+--------------------------+--------------------+----------------+------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000225
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200226.. versionchanged:: 3.3
227 Added support for the ``'n'`` and ``'N'`` formats.
228
Georg Brandl116aa622007-08-15 14:28:22 +0000229Notes:
230
231(1)
Georg Brandl60203b42010-10-06 10:11:56 +0000232 The ``'?'`` conversion code corresponds to the :c:type:`_Bool` type defined by
233 C99. If this type is not available, it is simulated using a :c:type:`char`. In
Georg Brandl116aa622007-08-15 14:28:22 +0000234 standard mode, it is always represented by one byte.
235
Victor Stinnerda9ec992010-12-28 13:26:42 +0000236(2)
Georg Brandl116aa622007-08-15 14:28:22 +0000237 The ``'q'`` and ``'Q'`` conversion codes are available in native mode only if
Georg Brandl60203b42010-10-06 10:11:56 +0000238 the platform C compiler supports C :c:type:`long long`, or, on Windows,
239 :c:type:`__int64`. They are always available in standard modes.
Georg Brandl116aa622007-08-15 14:28:22 +0000240
Victor Stinnerda9ec992010-12-28 13:26:42 +0000241(3)
Mark Dickinsonc5935772010-04-03 15:54:36 +0000242 When attempting to pack a non-integer using any of the integer conversion
243 codes, if the non-integer has a :meth:`__index__` method then that method is
244 called to convert the argument to an integer before packing.
245
246 .. versionchanged:: 3.2
247 Use of the :meth:`__index__` method for non-integers is new in 3.2.
248
Victor Stinnerda9ec992010-12-28 13:26:42 +0000249(4)
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200250 The ``'n'`` and ``'N'`` conversion codes are only available for the native
251 size (selected as the default or with the ``'@'`` byte order character).
252 For the standard size, you can use whichever of the other integer formats
253 fits your application.
254
255(5)
Mark Dickinsoncb532f12010-06-15 08:42:37 +0000256 For the ``'f'`` and ``'d'`` conversion codes, the packed representation uses
257 the IEEE 754 binary32 (for ``'f'``) or binary64 (for ``'d'``) format,
258 regardless of the floating-point format used by the platform.
259
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200260(6)
Mark Dickinsoncb532f12010-06-15 08:42:37 +0000261 The ``'P'`` format character is only available for the native byte ordering
262 (selected as the default or with the ``'@'`` byte order character). The byte
263 order character ``'='`` chooses to use little- or big-endian ordering based
264 on the host system. The struct module does not interpret this as native
265 ordering, so the ``'P'`` format is not available.
266
Mark Dickinsonc5935772010-04-03 15:54:36 +0000267
Georg Brandl116aa622007-08-15 14:28:22 +0000268A format character may be preceded by an integral repeat count. For example,
269the format string ``'4h'`` means exactly the same as ``'hhhh'``.
270
271Whitespace characters between formats are ignored; a count and its format must
272not contain whitespace though.
273
Benjamin Peterson4ae19462008-07-31 15:03:40 +0000274For the ``'s'`` format character, the count is interpreted as the length of the
275bytes, not a repeat count like for the other format characters; for example,
Georg Brandl116aa622007-08-15 14:28:22 +0000276``'10s'`` means a single 10-byte string, while ``'10c'`` means 10 characters.
Senthil Kumaranad3882a2011-07-17 17:29:17 +0800277If a count is not given, it defaults to 1. For packing, the string is
278truncated or padded with null bytes as appropriate to make it fit. For
279unpacking, the resulting bytes object always has exactly the specified number
280of bytes. As a special case, ``'0s'`` means a single, empty string (while
281``'0c'`` means 0 characters).
Georg Brandl116aa622007-08-15 14:28:22 +0000282
Mark Dickinsonb40b9472009-03-29 16:58:21 +0000283When packing a value ``x`` using one of the integer formats (``'b'``,
284``'B'``, ``'h'``, ``'H'``, ``'i'``, ``'I'``, ``'l'``, ``'L'``,
285``'q'``, ``'Q'``), if ``x`` is outside the valid range for that format
286then :exc:`struct.error` is raised.
287
288.. versionchanged:: 3.1
289 In 3.0, some of the integer formats wrapped out-of-range values and
290 raised :exc:`DeprecationWarning` instead of :exc:`struct.error`.
291
Georg Brandl116aa622007-08-15 14:28:22 +0000292The ``'p'`` format character encodes a "Pascal string", meaning a short
Georg Brandl93eb42e2010-07-10 10:23:40 +0000293variable-length string stored in a *fixed number of bytes*, given by the count.
294The first byte stored is the length of the string, or 255, whichever is
295smaller. The bytes of the string follow. If the string passed in to
296:func:`pack` is too long (longer than the count minus 1), only the leading
297``count-1`` bytes of the string are stored. If the string is shorter than
298``count-1``, it is padded with null bytes so that exactly count bytes in all
299are used. Note that for :func:`unpack`, the ``'p'`` format character consumes
300``count`` bytes, but that the string returned can never contain more than 255
301bytes.
Georg Brandl116aa622007-08-15 14:28:22 +0000302
Christian Heimesdd15f6c2008-03-16 00:07:10 +0000303For the ``'?'`` format character, the return value is either :const:`True` or
Georg Brandl116aa622007-08-15 14:28:22 +0000304:const:`False`. When packing, the truth value of the argument object is used.
305Either 0 or 1 in the native or standard bool representation will be packed, and
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200306any non-zero value will be ``True`` when unpacking.
Georg Brandl116aa622007-08-15 14:28:22 +0000307
Mark Dickinson6abf1822010-04-12 21:00:59 +0000308
Mark Dickinson6abf1822010-04-12 21:00:59 +0000309
310.. _struct-examples:
311
312Examples
313^^^^^^^^
314
315.. note::
316 All examples assume a native byte order, size, and alignment with a
317 big-endian machine.
318
319A basic example of packing/unpacking three integers::
Georg Brandl116aa622007-08-15 14:28:22 +0000320
321 >>> from struct import *
322 >>> pack('hhl', 1, 2, 3)
Benjamin Peterson4ae19462008-07-31 15:03:40 +0000323 b'\x00\x01\x00\x02\x00\x00\x00\x03'
324 >>> unpack('hhl', b'\x00\x01\x00\x02\x00\x00\x00\x03')
Georg Brandl116aa622007-08-15 14:28:22 +0000325 (1, 2, 3)
326 >>> calcsize('hhl')
327 8
328
Benjamin Peterson2b7411d2008-05-26 17:36:47 +0000329Unpacked fields can be named by assigning them to variables or by wrapping
330the result in a named tuple::
331
Benjamin Peterson4ae19462008-07-31 15:03:40 +0000332 >>> record = b'raymond \x32\x12\x08\x01\x08'
Benjamin Peterson2b7411d2008-05-26 17:36:47 +0000333 >>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)
334
335 >>> from collections import namedtuple
336 >>> Student = namedtuple('Student', 'name serialnum school gradelevel')
Benjamin Peterson4ae19462008-07-31 15:03:40 +0000337 >>> Student._make(unpack('<10sHHb', record))
338 Student(name=b'raymond ', serialnum=4658, school=264, gradelevel=8)
Georg Brandl116aa622007-08-15 14:28:22 +0000339
Mark Dickinson6abf1822010-04-12 21:00:59 +0000340The ordering of format characters may have an impact on size since the padding
341needed to satisfy alignment requirements is different::
342
Victor Stinnerda9ec992010-12-28 13:26:42 +0000343 >>> pack('ci', b'*', 0x12131415)
Mark Dickinson6abf1822010-04-12 21:00:59 +0000344 b'*\x00\x00\x00\x12\x13\x14\x15'
Victor Stinnerda9ec992010-12-28 13:26:42 +0000345 >>> pack('ic', 0x12131415, b'*')
Mark Dickinson6abf1822010-04-12 21:00:59 +0000346 b'\x12\x13\x14\x15*'
347 >>> calcsize('ci')
348 8
349 >>> calcsize('ic')
350 5
351
352The following format ``'llh0l'`` specifies two pad bytes at the end, assuming
353longs are aligned on 4-byte boundaries::
354
355 >>> pack('llh0l', 1, 2, 3)
356 b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
357
358This only works when native size and alignment are in effect; standard size and
359alignment does not enforce any alignment.
360
361
Georg Brandl116aa622007-08-15 14:28:22 +0000362.. seealso::
363
364 Module :mod:`array`
365 Packed binary storage of homogeneous data.
366
367 Module :mod:`xdrlib`
368 Packing and unpacking of XDR data.
369
370
371.. _struct-objects:
372
Mark Dickinsoncfd56f22010-06-12 18:37:54 +0000373Classes
Mark Dickinson6abf1822010-04-12 21:00:59 +0000374-------
Georg Brandl116aa622007-08-15 14:28:22 +0000375
376The :mod:`struct` module also defines the following type:
377
378
379.. class:: Struct(format)
380
Mark Dickinson6abf1822010-04-12 21:00:59 +0000381 Return a new Struct object which writes and reads binary data according to
382 the format string *format*. Creating a Struct object once and calling its
383 methods is more efficient than calling the :mod:`struct` functions with the
384 same format since the format string only needs to be compiled once.
Georg Brandl116aa622007-08-15 14:28:22 +0000385
Georg Brandl116aa622007-08-15 14:28:22 +0000386
Benjamin Petersone41251e2008-04-25 01:59:09 +0000387 Compiled Struct objects support the following methods and attributes:
Georg Brandl116aa622007-08-15 14:28:22 +0000388
Benjamin Petersone41251e2008-04-25 01:59:09 +0000389 .. method:: pack(v1, v2, ...)
Georg Brandl116aa622007-08-15 14:28:22 +0000390
Benjamin Petersone41251e2008-04-25 01:59:09 +0000391 Identical to the :func:`pack` function, using the compiled format.
392 (``len(result)`` will equal :attr:`self.size`.)
Georg Brandl116aa622007-08-15 14:28:22 +0000393
394
Benjamin Petersone41251e2008-04-25 01:59:09 +0000395 .. method:: pack_into(buffer, offset, v1, v2, ...)
Georg Brandl116aa622007-08-15 14:28:22 +0000396
Benjamin Petersone41251e2008-04-25 01:59:09 +0000397 Identical to the :func:`pack_into` function, using the compiled format.
Georg Brandl116aa622007-08-15 14:28:22 +0000398
399
Mark Dickinsonfdb99f12010-06-12 16:30:53 +0000400 .. method:: unpack(buffer)
Georg Brandl116aa622007-08-15 14:28:22 +0000401
Benjamin Petersone41251e2008-04-25 01:59:09 +0000402 Identical to the :func:`unpack` function, using the compiled format.
Mark Dickinsonfdb99f12010-06-12 16:30:53 +0000403 (``len(buffer)`` must equal :attr:`self.size`).
Georg Brandl116aa622007-08-15 14:28:22 +0000404
405
Georg Brandl7f01a132009-09-16 15:58:14 +0000406 .. method:: unpack_from(buffer, offset=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000407
Benjamin Petersone41251e2008-04-25 01:59:09 +0000408 Identical to the :func:`unpack_from` function, using the compiled format.
409 (``len(buffer[offset:])`` must be at least :attr:`self.size`).
Georg Brandl116aa622007-08-15 14:28:22 +0000410
411
Antoine Pitrou9f146812013-04-27 00:20:04 +0200412 .. method:: iter_unpack(buffer)
413
414 Identical to the :func:`iter_unpack` function, using the compiled format.
415 (``len(buffer)`` must be a multiple of :attr:`self.size`).
416
417 .. versionadded:: 3.4
418
Benjamin Petersone41251e2008-04-25 01:59:09 +0000419 .. attribute:: format
Georg Brandl116aa622007-08-15 14:28:22 +0000420
Benjamin Petersone41251e2008-04-25 01:59:09 +0000421 The format string used to construct this Struct object.
Georg Brandl116aa622007-08-15 14:28:22 +0000422
Benjamin Petersone41251e2008-04-25 01:59:09 +0000423 .. attribute:: size
Guido van Rossum04110fb2007-08-24 16:32:05 +0000424
Mark Dickinsonfdb99f12010-06-12 16:30:53 +0000425 The calculated size of the struct (and hence of the bytes object produced
426 by the :meth:`pack` method) corresponding to :attr:`format`.
Guido van Rossum04110fb2007-08-24 16:32:05 +0000427