blob: d6a3cb721e8388121261fdadff4ae37076aa208b [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
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04007**Source code:** :source:`Lib/struct.py`
8
Georg Brandl116aa622007-08-15 14:28:22 +00009.. index::
10 pair: C; structures
11 triple: packing; binary; data
12
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040013--------------
14
Georg Brandl116aa622007-08-15 14:28:22 +000015This module performs conversions between Python values and C structs represented
Mark Dickinson6abf1822010-04-12 21:00:59 +000016as Python :class:`bytes` objects. This can be used in handling binary data
17stored in files or from network connections, among other sources. It uses
18:ref:`struct-format-strings` as compact descriptions of the layout of the C
19structs and the intended conversion to/from Python values.
20
21.. note::
22
23 By default, the result of packing a given C struct includes pad bytes in
24 order to maintain proper alignment for the C types involved; similarly,
25 alignment is taken into account when unpacking. This behavior is chosen so
26 that the bytes of a packed struct correspond exactly to the layout in memory
Mark Dickinsoncb532f12010-06-15 08:42:37 +000027 of the corresponding C struct. To handle platform-independent data formats
Senthil Kumaran916bd382010-10-15 12:55:19 +000028 or omit implicit pad bytes, use ``standard`` size and alignment instead of
29 ``native`` size and alignment: see :ref:`struct-alignment` for details.
Mark Dickinson6abf1822010-04-12 21:00:59 +000030
Georg Brandlf30132f2014-10-31 09:46:41 +010031Several :mod:`struct` functions (and methods of :class:`Struct`) take a *buffer*
32argument. This refers to objects that implement the :ref:`bufferobjects` and
33provide either a readable or read-writable buffer. The most common types used
34for that purpose are :class:`bytes` and :class:`bytearray`, but many other types
35that can be viewed as an array of bytes implement the buffer protocol, so that
36they can be read/filled without additional copying from a :class:`bytes` object.
37
38
Mark Dickinson6abf1822010-04-12 21:00:59 +000039Functions and Exceptions
40------------------------
Georg Brandl116aa622007-08-15 14:28:22 +000041
42The module defines the following exception and functions:
43
44
45.. exception:: error
46
Mark Dickinson6abf1822010-04-12 21:00:59 +000047 Exception raised on various occasions; argument is a string describing what
48 is wrong.
Georg Brandl116aa622007-08-15 14:28:22 +000049
50
Victor Stinner3f2d1012017-02-02 12:09:30 +010051.. function:: pack(format, v1, v2, ...)
Georg Brandl116aa622007-08-15 14:28:22 +000052
Mark Dickinsonfdb99f12010-06-12 16:30:53 +000053 Return a bytes object containing the values *v1*, *v2*, ... packed according
Victor Stinner3f2d1012017-02-02 12:09:30 +010054 to the format string *format*. The arguments must match the values required by
Mark Dickinsonfdb99f12010-06-12 16:30:53 +000055 the format exactly.
Georg Brandl116aa622007-08-15 14:28:22 +000056
57
Victor Stinner3f2d1012017-02-02 12:09:30 +010058.. function:: pack_into(format, buffer, offset, v1, v2, ...)
Georg Brandl116aa622007-08-15 14:28:22 +000059
Victor Stinner3f2d1012017-02-02 12:09:30 +010060 Pack the values *v1*, *v2*, ... according to the format string *format* and
Mark Dickinsonfdb99f12010-06-12 16:30:53 +000061 write the packed bytes into the writable buffer *buffer* starting at
Georg Brandlf30132f2014-10-31 09:46:41 +010062 position *offset*. Note that *offset* is a required argument.
Georg Brandl116aa622007-08-15 14:28:22 +000063
Georg Brandl116aa622007-08-15 14:28:22 +000064
Victor Stinner3f2d1012017-02-02 12:09:30 +010065.. function:: unpack(format, buffer)
Georg Brandl116aa622007-08-15 14:28:22 +000066
Victor Stinner3f2d1012017-02-02 12:09:30 +010067 Unpack from the buffer *buffer* (presumably packed by ``pack(format, ...)``)
68 according to the format string *format*. The result is a tuple even if it
Martin Panterb0309912016-04-15 23:03:54 +000069 contains exactly one item. The buffer's size in bytes must match the
70 size required by the format, as reflected by :func:`calcsize`.
Georg Brandl116aa622007-08-15 14:28:22 +000071
72
Victor Stinner3f2d1012017-02-02 12:09:30 +010073.. function:: unpack_from(format, buffer, offset=0)
Georg Brandl116aa622007-08-15 14:28:22 +000074
Mark Dickinsonfdb99f12010-06-12 16:30:53 +000075 Unpack from *buffer* starting at position *offset*, according to the format
Victor Stinner3f2d1012017-02-02 12:09:30 +010076 string *format*. The result is a tuple even if it contains exactly one
Xiang Zhangc10b2882018-03-11 02:58:52 +080077 item. The buffer's size in bytes, starting at position *offset*, must be at
78 least the size required by the format, as reflected by :func:`calcsize`.
Georg Brandl116aa622007-08-15 14:28:22 +000079
Georg Brandl116aa622007-08-15 14:28:22 +000080
Victor Stinner3f2d1012017-02-02 12:09:30 +010081.. function:: iter_unpack(format, buffer)
Antoine Pitrou9f146812013-04-27 00:20:04 +020082
83 Iteratively unpack from the buffer *buffer* according to the format
Victor Stinner3f2d1012017-02-02 12:09:30 +010084 string *format*. This function returns an iterator which will read
Antoine Pitrou9f146812013-04-27 00:20:04 +020085 equally-sized chunks from the buffer until all its contents have been
Martin Panterb0309912016-04-15 23:03:54 +000086 consumed. The buffer's size in bytes must be a multiple of the size
87 required by the format, as reflected by :func:`calcsize`.
Antoine Pitrou9f146812013-04-27 00:20:04 +020088
89 Each iteration yields a tuple as specified by the format string.
90
91 .. versionadded:: 3.4
92
93
Victor Stinner3f2d1012017-02-02 12:09:30 +010094.. function:: calcsize(format)
Georg Brandl116aa622007-08-15 14:28:22 +000095
Mark Dickinsonfdb99f12010-06-12 16:30:53 +000096 Return the size of the struct (and hence of the bytes object produced by
Victor Stinner3f2d1012017-02-02 12:09:30 +010097 ``pack(format, ...)``) corresponding to the format string *format*.
98
Georg Brandl116aa622007-08-15 14:28:22 +000099
Mark Dickinson6abf1822010-04-12 21:00:59 +0000100.. _struct-format-strings:
101
102Format Strings
103--------------
104
105Format strings are the mechanism used to specify the expected layout when
Mark Dickinsoncfd56f22010-06-12 18:37:54 +0000106packing and unpacking data. They are built up from :ref:`format-characters`,
107which specify the type of data being packed/unpacked. In addition, there are
108special characters for controlling the :ref:`struct-alignment`.
109
110
111.. _struct-alignment:
112
113Byte Order, Size, and Alignment
114^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
115
116By default, C types are represented in the machine's native format and byte
117order, and properly aligned by skipping pad bytes if necessary (according to the
118rules used by the C compiler).
119
120Alternatively, the first character of the format string can be used to indicate
121the byte order, size and alignment of the packed data, according to the
122following table:
123
Mark Dickinsoncb532f12010-06-15 08:42:37 +0000124+-----------+------------------------+----------+-----------+
125| Character | Byte order | Size | Alignment |
126+===========+========================+==========+===========+
127| ``@`` | native | native | native |
128+-----------+------------------------+----------+-----------+
129| ``=`` | native | standard | none |
130+-----------+------------------------+----------+-----------+
131| ``<`` | little-endian | standard | none |
132+-----------+------------------------+----------+-----------+
133| ``>`` | big-endian | standard | none |
134+-----------+------------------------+----------+-----------+
135| ``!`` | network (= big-endian) | standard | none |
136+-----------+------------------------+----------+-----------+
Mark Dickinsoncfd56f22010-06-12 18:37:54 +0000137
138If the first character is not one of these, ``'@'`` is assumed.
139
140Native byte order is big-endian or little-endian, depending on the host
141system. For example, Intel x86 and AMD64 (x86-64) are little-endian;
142Motorola 68000 and PowerPC G5 are big-endian; ARM and Intel Itanium feature
143switchable endianness (bi-endian). Use ``sys.byteorder`` to check the
144endianness of your system.
145
146Native size and alignment are determined using the C compiler's
147``sizeof`` expression. This is always combined with native byte order.
148
Mark Dickinsoncb532f12010-06-15 08:42:37 +0000149Standard size depends only on the format character; see the table in
150the :ref:`format-characters` section.
Mark Dickinsoncfd56f22010-06-12 18:37:54 +0000151
152Note the difference between ``'@'`` and ``'='``: both use native byte order, but
153the size and alignment of the latter is standardized.
154
155The form ``'!'`` is available for those poor souls who claim they can't remember
156whether network byte order is big-endian or little-endian.
157
158There is no way to indicate non-native byte order (force byte-swapping); use the
159appropriate choice of ``'<'`` or ``'>'``.
160
Mark Dickinsoncfd56f22010-06-12 18:37:54 +0000161Notes:
162
163(1) Padding is only automatically added between successive structure members.
164 No padding is added at the beginning or the end of the encoded struct.
165
166(2) No padding is added when using non-native size and alignment, e.g.
167 with '<', '>', '=', and '!'.
168
169(3) To align the end of a structure to the alignment requirement of a
170 particular type, end the format with the code for that type with a repeat
171 count of zero. See :ref:`struct-examples`.
172
173
174.. _format-characters:
Mark Dickinson6abf1822010-04-12 21:00:59 +0000175
176Format Characters
177^^^^^^^^^^^^^^^^^
178
Georg Brandl116aa622007-08-15 14:28:22 +0000179Format characters have the following meaning; the conversion between C and
Mark Dickinson719e4e32010-06-29 20:10:42 +0000180Python values should be obvious given their types. The 'Standard size' column
181refers to the size of the packed value in bytes when using standard size; that
182is, when the format string starts with one of ``'<'``, ``'>'``, ``'!'`` or
183``'='``. When using native size, the size of the packed value is
184platform-dependent.
Georg Brandl116aa622007-08-15 14:28:22 +0000185
Georg Brandl60203b42010-10-06 10:11:56 +0000186+--------+--------------------------+--------------------+----------------+------------+
187| Format | C Type | Python type | Standard size | Notes |
188+========+==========================+====================+================+============+
189| ``x`` | pad byte | no value | | |
190+--------+--------------------------+--------------------+----------------+------------+
191| ``c`` | :c:type:`char` | bytes of length 1 | 1 | |
192+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000193| ``b`` | :c:type:`signed char` | integer | 1 | \(1),\(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000194+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000195| ``B`` | :c:type:`unsigned char` | integer | 1 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000196+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000197| ``?`` | :c:type:`_Bool` | bool | 1 | \(1) |
Georg Brandl60203b42010-10-06 10:11:56 +0000198+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000199| ``h`` | :c:type:`short` | integer | 2 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000200+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000201| ``H`` | :c:type:`unsigned short` | integer | 2 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000202+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000203| ``i`` | :c:type:`int` | integer | 4 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000204+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000205| ``I`` | :c:type:`unsigned int` | integer | 4 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000206+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000207| ``l`` | :c:type:`long` | integer | 4 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000208+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000209| ``L`` | :c:type:`unsigned long` | integer | 4 | \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000210+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000211| ``q`` | :c:type:`long long` | integer | 8 | \(2), \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000212+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000213| ``Q`` | :c:type:`unsigned long | integer | 8 | \(2), \(3) |
Georg Brandl60203b42010-10-06 10:11:56 +0000214| | long` | | | |
215+--------+--------------------------+--------------------+----------------+------------+
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200216| ``n`` | :c:type:`ssize_t` | integer | | \(4) |
Georg Brandl60203b42010-10-06 10:11:56 +0000217+--------+--------------------------+--------------------+----------------+------------+
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200218| ``N`` | :c:type:`size_t` | integer | | \(4) |
219+--------+--------------------------+--------------------+----------------+------------+
Mark Dickinson7c4e4092016-09-03 17:21:29 +0100220| ``e`` | \(7) | float | 2 | \(5) |
221+--------+--------------------------+--------------------+----------------+------------+
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200222| ``f`` | :c:type:`float` | float | 4 | \(5) |
223+--------+--------------------------+--------------------+----------------+------------+
224| ``d`` | :c:type:`double` | float | 8 | \(5) |
Georg Brandl60203b42010-10-06 10:11:56 +0000225+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000226| ``s`` | :c:type:`char[]` | bytes | | |
Georg Brandl60203b42010-10-06 10:11:56 +0000227+--------+--------------------------+--------------------+----------------+------------+
Victor Stinnerda9ec992010-12-28 13:26:42 +0000228| ``p`` | :c:type:`char[]` | bytes | | |
Georg Brandl60203b42010-10-06 10:11:56 +0000229+--------+--------------------------+--------------------+----------------+------------+
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200230| ``P`` | :c:type:`void \*` | integer | | \(6) |
Georg Brandl60203b42010-10-06 10:11:56 +0000231+--------+--------------------------+--------------------+----------------+------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000232
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200233.. versionchanged:: 3.3
234 Added support for the ``'n'`` and ``'N'`` formats.
235
Yury Selivanov3479b5f2016-11-10 13:25:26 -0500236.. versionchanged:: 3.6
237 Added support for the ``'e'`` format.
238
239
Georg Brandl116aa622007-08-15 14:28:22 +0000240Notes:
241
242(1)
Georg Brandl60203b42010-10-06 10:11:56 +0000243 The ``'?'`` conversion code corresponds to the :c:type:`_Bool` type defined by
244 C99. If this type is not available, it is simulated using a :c:type:`char`. In
Georg Brandl116aa622007-08-15 14:28:22 +0000245 standard mode, it is always represented by one byte.
246
Victor Stinnerda9ec992010-12-28 13:26:42 +0000247(2)
Georg Brandl116aa622007-08-15 14:28:22 +0000248 The ``'q'`` and ``'Q'`` conversion codes are available in native mode only if
Georg Brandl60203b42010-10-06 10:11:56 +0000249 the platform C compiler supports C :c:type:`long long`, or, on Windows,
250 :c:type:`__int64`. They are always available in standard modes.
Georg Brandl116aa622007-08-15 14:28:22 +0000251
Victor Stinnerda9ec992010-12-28 13:26:42 +0000252(3)
Mark Dickinsonc5935772010-04-03 15:54:36 +0000253 When attempting to pack a non-integer using any of the integer conversion
254 codes, if the non-integer has a :meth:`__index__` method then that method is
255 called to convert the argument to an integer before packing.
256
257 .. versionchanged:: 3.2
258 Use of the :meth:`__index__` method for non-integers is new in 3.2.
259
Victor Stinnerda9ec992010-12-28 13:26:42 +0000260(4)
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200261 The ``'n'`` and ``'N'`` conversion codes are only available for the native
262 size (selected as the default or with the ``'@'`` byte order character).
263 For the standard size, you can use whichever of the other integer formats
264 fits your application.
265
266(5)
Mark Dickinson7c4e4092016-09-03 17:21:29 +0100267 For the ``'f'``, ``'d'`` and ``'e'`` conversion codes, the packed
268 representation uses the IEEE 754 binary32, binary64 or binary16 format (for
269 ``'f'``, ``'d'`` or ``'e'`` respectively), regardless of the floating-point
270 format used by the platform.
Mark Dickinsoncb532f12010-06-15 08:42:37 +0000271
Antoine Pitrou45d9c912011-10-06 15:27:40 +0200272(6)
Mark Dickinsoncb532f12010-06-15 08:42:37 +0000273 The ``'P'`` format character is only available for the native byte ordering
274 (selected as the default or with the ``'@'`` byte order character). The byte
275 order character ``'='`` chooses to use little- or big-endian ordering based
276 on the host system. The struct module does not interpret this as native
277 ordering, so the ``'P'`` format is not available.
278
Mark Dickinson7c4e4092016-09-03 17:21:29 +0100279(7)
280 The IEEE 754 binary16 "half precision" type was introduced in the 2008
281 revision of the `IEEE 754 standard <ieee 754 standard_>`_. It has a sign
282 bit, a 5-bit exponent and 11-bit precision (with 10 bits explicitly stored),
283 and can represent numbers between approximately ``6.1e-05`` and ``6.5e+04``
284 at full precision. This type is not widely supported by C compilers: on a
285 typical machine, an unsigned short can be used for storage, but not for math
286 operations. See the Wikipedia page on the `half-precision floating-point
287 format <half precision format_>`_ for more information.
288
Mark Dickinsonc5935772010-04-03 15:54:36 +0000289
Georg Brandl116aa622007-08-15 14:28:22 +0000290A format character may be preceded by an integral repeat count. For example,
291the format string ``'4h'`` means exactly the same as ``'hhhh'``.
292
293Whitespace characters between formats are ignored; a count and its format must
294not contain whitespace though.
295
Benjamin Peterson4ae19462008-07-31 15:03:40 +0000296For the ``'s'`` format character, the count is interpreted as the length of the
297bytes, not a repeat count like for the other format characters; for example,
Georg Brandl116aa622007-08-15 14:28:22 +0000298``'10s'`` means a single 10-byte string, while ``'10c'`` means 10 characters.
Senthil Kumaranad3882a2011-07-17 17:29:17 +0800299If a count is not given, it defaults to 1. For packing, the string is
300truncated or padded with null bytes as appropriate to make it fit. For
301unpacking, the resulting bytes object always has exactly the specified number
302of bytes. As a special case, ``'0s'`` means a single, empty string (while
303``'0c'`` means 0 characters).
Georg Brandl116aa622007-08-15 14:28:22 +0000304
Mark Dickinsonb40b9472009-03-29 16:58:21 +0000305When packing a value ``x`` using one of the integer formats (``'b'``,
306``'B'``, ``'h'``, ``'H'``, ``'i'``, ``'I'``, ``'l'``, ``'L'``,
307``'q'``, ``'Q'``), if ``x`` is outside the valid range for that format
308then :exc:`struct.error` is raised.
309
310.. versionchanged:: 3.1
311 In 3.0, some of the integer formats wrapped out-of-range values and
312 raised :exc:`DeprecationWarning` instead of :exc:`struct.error`.
313
Georg Brandl116aa622007-08-15 14:28:22 +0000314The ``'p'`` format character encodes a "Pascal string", meaning a short
Georg Brandl93eb42e2010-07-10 10:23:40 +0000315variable-length string stored in a *fixed number of bytes*, given by the count.
316The first byte stored is the length of the string, or 255, whichever is
317smaller. The bytes of the string follow. If the string passed in to
318:func:`pack` is too long (longer than the count minus 1), only the leading
319``count-1`` bytes of the string are stored. If the string is shorter than
320``count-1``, it is padded with null bytes so that exactly count bytes in all
321are used. Note that for :func:`unpack`, the ``'p'`` format character consumes
322``count`` bytes, but that the string returned can never contain more than 255
323bytes.
Georg Brandl116aa622007-08-15 14:28:22 +0000324
Christian Heimesdd15f6c2008-03-16 00:07:10 +0000325For the ``'?'`` format character, the return value is either :const:`True` or
Georg Brandl116aa622007-08-15 14:28:22 +0000326:const:`False`. When packing, the truth value of the argument object is used.
327Either 0 or 1 in the native or standard bool representation will be packed, and
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200328any non-zero value will be ``True`` when unpacking.
Georg Brandl116aa622007-08-15 14:28:22 +0000329
Mark Dickinson6abf1822010-04-12 21:00:59 +0000330
Mark Dickinson6abf1822010-04-12 21:00:59 +0000331
332.. _struct-examples:
333
334Examples
335^^^^^^^^
336
337.. note::
338 All examples assume a native byte order, size, and alignment with a
339 big-endian machine.
340
341A basic example of packing/unpacking three integers::
Georg Brandl116aa622007-08-15 14:28:22 +0000342
343 >>> from struct import *
344 >>> pack('hhl', 1, 2, 3)
Benjamin Peterson4ae19462008-07-31 15:03:40 +0000345 b'\x00\x01\x00\x02\x00\x00\x00\x03'
346 >>> unpack('hhl', b'\x00\x01\x00\x02\x00\x00\x00\x03')
Georg Brandl116aa622007-08-15 14:28:22 +0000347 (1, 2, 3)
348 >>> calcsize('hhl')
349 8
350
Benjamin Peterson2b7411d2008-05-26 17:36:47 +0000351Unpacked fields can be named by assigning them to variables or by wrapping
352the result in a named tuple::
353
Benjamin Peterson4ae19462008-07-31 15:03:40 +0000354 >>> record = b'raymond \x32\x12\x08\x01\x08'
Benjamin Peterson2b7411d2008-05-26 17:36:47 +0000355 >>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)
356
357 >>> from collections import namedtuple
358 >>> Student = namedtuple('Student', 'name serialnum school gradelevel')
Benjamin Peterson4ae19462008-07-31 15:03:40 +0000359 >>> Student._make(unpack('<10sHHb', record))
360 Student(name=b'raymond ', serialnum=4658, school=264, gradelevel=8)
Georg Brandl116aa622007-08-15 14:28:22 +0000361
Mark Dickinson6abf1822010-04-12 21:00:59 +0000362The ordering of format characters may have an impact on size since the padding
363needed to satisfy alignment requirements is different::
364
Victor Stinnerda9ec992010-12-28 13:26:42 +0000365 >>> pack('ci', b'*', 0x12131415)
Mark Dickinson6abf1822010-04-12 21:00:59 +0000366 b'*\x00\x00\x00\x12\x13\x14\x15'
Victor Stinnerda9ec992010-12-28 13:26:42 +0000367 >>> pack('ic', 0x12131415, b'*')
Mark Dickinson6abf1822010-04-12 21:00:59 +0000368 b'\x12\x13\x14\x15*'
369 >>> calcsize('ci')
370 8
371 >>> calcsize('ic')
372 5
373
374The following format ``'llh0l'`` specifies two pad bytes at the end, assuming
375longs are aligned on 4-byte boundaries::
376
377 >>> pack('llh0l', 1, 2, 3)
378 b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
379
380This only works when native size and alignment are in effect; standard size and
381alignment does not enforce any alignment.
382
383
Georg Brandl116aa622007-08-15 14:28:22 +0000384.. seealso::
385
386 Module :mod:`array`
387 Packed binary storage of homogeneous data.
388
389 Module :mod:`xdrlib`
390 Packing and unpacking of XDR data.
391
392
393.. _struct-objects:
394
Mark Dickinsoncfd56f22010-06-12 18:37:54 +0000395Classes
Mark Dickinson6abf1822010-04-12 21:00:59 +0000396-------
Georg Brandl116aa622007-08-15 14:28:22 +0000397
398The :mod:`struct` module also defines the following type:
399
400
401.. class:: Struct(format)
402
Mark Dickinson6abf1822010-04-12 21:00:59 +0000403 Return a new Struct object which writes and reads binary data according to
404 the format string *format*. Creating a Struct object once and calling its
405 methods is more efficient than calling the :mod:`struct` functions with the
406 same format since the format string only needs to be compiled once.
Georg Brandl116aa622007-08-15 14:28:22 +0000407
Georg Brandl116aa622007-08-15 14:28:22 +0000408
Benjamin Petersone41251e2008-04-25 01:59:09 +0000409 Compiled Struct objects support the following methods and attributes:
Georg Brandl116aa622007-08-15 14:28:22 +0000410
Benjamin Petersone41251e2008-04-25 01:59:09 +0000411 .. method:: pack(v1, v2, ...)
Georg Brandl116aa622007-08-15 14:28:22 +0000412
Benjamin Petersone41251e2008-04-25 01:59:09 +0000413 Identical to the :func:`pack` function, using the compiled format.
Martin Panterb0309912016-04-15 23:03:54 +0000414 (``len(result)`` will equal :attr:`size`.)
Georg Brandl116aa622007-08-15 14:28:22 +0000415
416
Benjamin Petersone41251e2008-04-25 01:59:09 +0000417 .. method:: pack_into(buffer, offset, v1, v2, ...)
Georg Brandl116aa622007-08-15 14:28:22 +0000418
Benjamin Petersone41251e2008-04-25 01:59:09 +0000419 Identical to the :func:`pack_into` function, using the compiled format.
Georg Brandl116aa622007-08-15 14:28:22 +0000420
421
Mark Dickinsonfdb99f12010-06-12 16:30:53 +0000422 .. method:: unpack(buffer)
Georg Brandl116aa622007-08-15 14:28:22 +0000423
Benjamin Petersone41251e2008-04-25 01:59:09 +0000424 Identical to the :func:`unpack` function, using the compiled format.
Martin Panterb0309912016-04-15 23:03:54 +0000425 The buffer's size in bytes must equal :attr:`size`.
Georg Brandl116aa622007-08-15 14:28:22 +0000426
427
Georg Brandl7f01a132009-09-16 15:58:14 +0000428 .. method:: unpack_from(buffer, offset=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000429
Benjamin Petersone41251e2008-04-25 01:59:09 +0000430 Identical to the :func:`unpack_from` function, using the compiled format.
Xiang Zhangc10b2882018-03-11 02:58:52 +0800431 The buffer's size in bytes, starting at position *offset*, must be at least
Martin Panterb0309912016-04-15 23:03:54 +0000432 :attr:`size`.
Georg Brandl116aa622007-08-15 14:28:22 +0000433
434
Antoine Pitrou9f146812013-04-27 00:20:04 +0200435 .. method:: iter_unpack(buffer)
436
437 Identical to the :func:`iter_unpack` function, using the compiled format.
Martin Panterb0309912016-04-15 23:03:54 +0000438 The buffer's size in bytes must be a multiple of :attr:`size`.
Antoine Pitrou9f146812013-04-27 00:20:04 +0200439
440 .. versionadded:: 3.4
441
Benjamin Petersone41251e2008-04-25 01:59:09 +0000442 .. attribute:: format
Georg Brandl116aa622007-08-15 14:28:22 +0000443
Benjamin Petersone41251e2008-04-25 01:59:09 +0000444 The format string used to construct this Struct object.
Georg Brandl116aa622007-08-15 14:28:22 +0000445
Victor Stinnerf87b85f2017-06-23 15:11:12 +0200446 .. versionchanged:: 3.7
447 The format string type is now :class:`str` instead of :class:`bytes`.
448
Benjamin Petersone41251e2008-04-25 01:59:09 +0000449 .. attribute:: size
Guido van Rossum04110fb2007-08-24 16:32:05 +0000450
Mark Dickinsonfdb99f12010-06-12 16:30:53 +0000451 The calculated size of the struct (and hence of the bytes object produced
452 by the :meth:`pack` method) corresponding to :attr:`format`.
Guido van Rossum04110fb2007-08-24 16:32:05 +0000453
Mark Dickinson7c4e4092016-09-03 17:21:29 +0100454
455.. _half precision format: https://en.wikipedia.org/wiki/Half-precision_floating-point_format
456
457.. _ieee 754 standard: https://en.wikipedia.org/wiki/IEEE_floating_point#IEEE_754-2008