2008-07-31 12:03:40 -03:00
|
|
|
:mod:`struct` --- Interpret bytes as packed binary data
|
2009-09-16 12:58:14 -03:00
|
|
|
=======================================================
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
.. module:: struct
|
2008-07-31 12:03:40 -03:00
|
|
|
:synopsis: Interpret bytes as packed binary data.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2016-06-11 16:02:54 -03:00
|
|
|
**Source code:** :source:`Lib/struct.py`
|
|
|
|
|
2007-08-15 11:28:22 -03:00
|
|
|
.. index::
|
|
|
|
pair: C; structures
|
|
|
|
triple: packing; binary; data
|
|
|
|
|
2016-06-11 16:02:54 -03:00
|
|
|
--------------
|
|
|
|
|
2022-11-22 14:06:36 -04:00
|
|
|
This module converts between Python values and C structs represented
|
|
|
|
as Python :class:`bytes` objects. Compact :ref:`format strings <struct-format-strings>`
|
|
|
|
describe the intended conversions to/from Python values.
|
|
|
|
The module's functions and objects can be used for two largely
|
|
|
|
distinct applications, data exchange with external sources (files or
|
|
|
|
network connections), or data transfer between the Python application
|
|
|
|
and the C layer.
|
2010-04-12 18:00:59 -03:00
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
2022-11-22 14:06:36 -04:00
|
|
|
When no prefix character is given, native mode is the default. It
|
|
|
|
packs or unpacks data based on the platform and compiler on which
|
|
|
|
the Python interpreter was built.
|
|
|
|
The result of packing a given C struct includes pad bytes which
|
|
|
|
maintain proper alignment for the C types involved; similarly,
|
|
|
|
alignment is taken into account when unpacking. In contrast, when
|
|
|
|
communicating data between external sources, the programmer is
|
|
|
|
responsible for defining byte ordering and padding between elements.
|
|
|
|
See :ref:`struct-alignment` for details.
|
2010-04-12 18:00:59 -03:00
|
|
|
|
2014-10-31 05:46:41 -03:00
|
|
|
Several :mod:`struct` functions (and methods of :class:`Struct`) take a *buffer*
|
|
|
|
argument. This refers to objects that implement the :ref:`bufferobjects` and
|
|
|
|
provide either a readable or read-writable buffer. The most common types used
|
|
|
|
for that purpose are :class:`bytes` and :class:`bytearray`, but many other types
|
|
|
|
that can be viewed as an array of bytes implement the buffer protocol, so that
|
|
|
|
they can be read/filled without additional copying from a :class:`bytes` object.
|
|
|
|
|
|
|
|
|
2010-04-12 18:00:59 -03:00
|
|
|
Functions and Exceptions
|
|
|
|
------------------------
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
The module defines the following exception and functions:
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: error
|
|
|
|
|
2010-04-12 18:00:59 -03:00
|
|
|
Exception raised on various occasions; argument is a string describing what
|
|
|
|
is wrong.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
2017-02-02 07:09:30 -04:00
|
|
|
.. function:: pack(format, v1, v2, ...)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2010-06-12 13:30:53 -03:00
|
|
|
Return a bytes object containing the values *v1*, *v2*, ... packed according
|
2017-02-02 07:09:30 -04:00
|
|
|
to the format string *format*. The arguments must match the values required by
|
2010-06-12 13:30:53 -03:00
|
|
|
the format exactly.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
2017-02-02 07:09:30 -04:00
|
|
|
.. function:: pack_into(format, buffer, offset, v1, v2, ...)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2017-02-02 07:09:30 -04:00
|
|
|
Pack the values *v1*, *v2*, ... according to the format string *format* and
|
2010-06-12 13:30:53 -03:00
|
|
|
write the packed bytes into the writable buffer *buffer* starting at
|
2014-10-31 05:46:41 -03:00
|
|
|
position *offset*. Note that *offset* is a required argument.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
2017-02-02 07:09:30 -04:00
|
|
|
.. function:: unpack(format, buffer)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2017-02-02 07:09:30 -04:00
|
|
|
Unpack from the buffer *buffer* (presumably packed by ``pack(format, ...)``)
|
|
|
|
according to the format string *format*. The result is a tuple even if it
|
2016-04-15 20:03:54 -03:00
|
|
|
contains exactly one item. The buffer's size in bytes must match the
|
|
|
|
size required by the format, as reflected by :func:`calcsize`.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
2019-06-05 17:24:28 -03:00
|
|
|
.. function:: unpack_from(format, /, buffer, offset=0)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2010-06-12 13:30:53 -03:00
|
|
|
Unpack from *buffer* starting at position *offset*, according to the format
|
2017-02-02 07:09:30 -04:00
|
|
|
string *format*. The result is a tuple even if it contains exactly one
|
2018-03-10 14:58:52 -04:00
|
|
|
item. The buffer's size in bytes, starting at position *offset*, must be at
|
|
|
|
least the size required by the format, as reflected by :func:`calcsize`.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
2017-02-02 07:09:30 -04:00
|
|
|
.. function:: iter_unpack(format, buffer)
|
2013-04-26 19:20:04 -03:00
|
|
|
|
|
|
|
Iteratively unpack from the buffer *buffer* according to the format
|
2017-02-02 07:09:30 -04:00
|
|
|
string *format*. This function returns an iterator which will read
|
2022-07-05 06:16:10 -03:00
|
|
|
equally sized chunks from the buffer until all its contents have been
|
2016-04-15 20:03:54 -03:00
|
|
|
consumed. The buffer's size in bytes must be a multiple of the size
|
|
|
|
required by the format, as reflected by :func:`calcsize`.
|
2013-04-26 19:20:04 -03:00
|
|
|
|
|
|
|
Each iteration yields a tuple as specified by the format string.
|
|
|
|
|
|
|
|
.. versionadded:: 3.4
|
|
|
|
|
|
|
|
|
2017-02-02 07:09:30 -04:00
|
|
|
.. function:: calcsize(format)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2010-06-12 13:30:53 -03:00
|
|
|
Return the size of the struct (and hence of the bytes object produced by
|
2017-02-02 07:09:30 -04:00
|
|
|
``pack(format, ...)``) corresponding to the format string *format*.
|
|
|
|
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2010-04-12 18:00:59 -03:00
|
|
|
.. _struct-format-strings:
|
|
|
|
|
|
|
|
Format Strings
|
|
|
|
--------------
|
|
|
|
|
2022-11-22 14:06:36 -04:00
|
|
|
Format strings describe the data layout when
|
|
|
|
packing and unpacking data. They are built up from :ref:`format characters<format-characters>`,
|
|
|
|
which specify the type of data being packed/unpacked. In addition,
|
|
|
|
special characters control the :ref:`byte order, size and alignment<struct-alignment>`.
|
|
|
|
Each format string consists of an optional prefix character which
|
|
|
|
describes the overall properties of the data and one or more format
|
|
|
|
characters which describe the actual data values and padding.
|
2010-06-12 15:37:54 -03:00
|
|
|
|
|
|
|
|
|
|
|
.. _struct-alignment:
|
|
|
|
|
|
|
|
Byte Order, Size, and Alignment
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
By default, C types are represented in the machine's native format and byte
|
|
|
|
order, and properly aligned by skipping pad bytes if necessary (according to the
|
|
|
|
rules used by the C compiler).
|
2022-11-22 14:06:36 -04:00
|
|
|
This behavior is chosen so
|
|
|
|
that the bytes of a packed struct correspond exactly to the memory layout
|
|
|
|
of the corresponding C struct.
|
|
|
|
Whether to use native byte ordering
|
|
|
|
and padding or standard formats depends on the application.
|
2010-06-12 15:37:54 -03:00
|
|
|
|
2018-10-26 03:00:49 -03:00
|
|
|
.. index::
|
2018-10-28 08:41:26 -03:00
|
|
|
single: @ (at); in struct format strings
|
|
|
|
single: = (equals); in struct format strings
|
|
|
|
single: < (less); in struct format strings
|
|
|
|
single: > (greater); in struct format strings
|
|
|
|
single: ! (exclamation); in struct format strings
|
2018-10-26 03:00:49 -03:00
|
|
|
|
2010-06-12 15:37:54 -03:00
|
|
|
Alternatively, the first character of the format string can be used to indicate
|
|
|
|
the byte order, size and alignment of the packed data, according to the
|
|
|
|
following table:
|
|
|
|
|
2010-06-15 05:42:37 -03:00
|
|
|
+-----------+------------------------+----------+-----------+
|
|
|
|
| Character | Byte order | Size | Alignment |
|
|
|
|
+===========+========================+==========+===========+
|
|
|
|
| ``@`` | native | native | native |
|
|
|
|
+-----------+------------------------+----------+-----------+
|
|
|
|
| ``=`` | native | standard | none |
|
|
|
|
+-----------+------------------------+----------+-----------+
|
|
|
|
| ``<`` | little-endian | standard | none |
|
|
|
|
+-----------+------------------------+----------+-----------+
|
|
|
|
| ``>`` | big-endian | standard | none |
|
|
|
|
+-----------+------------------------+----------+-----------+
|
|
|
|
| ``!`` | network (= big-endian) | standard | none |
|
|
|
|
+-----------+------------------------+----------+-----------+
|
2010-06-12 15:37:54 -03:00
|
|
|
|
|
|
|
If the first character is not one of these, ``'@'`` is assumed.
|
|
|
|
|
2022-11-22 14:06:36 -04:00
|
|
|
Native byte order is big-endian or little-endian, depending on the
|
|
|
|
host system. For example, Intel x86, AMD64 (x86-64), and Apple M1 are
|
|
|
|
little-endian; IBM z and many legacy architectures are big-endian.
|
|
|
|
Use :data:`sys.byteorder` to check the endianness of your system.
|
2010-06-12 15:37:54 -03:00
|
|
|
|
|
|
|
Native size and alignment are determined using the C compiler's
|
|
|
|
``sizeof`` expression. This is always combined with native byte order.
|
|
|
|
|
2010-06-15 05:42:37 -03:00
|
|
|
Standard size depends only on the format character; see the table in
|
|
|
|
the :ref:`format-characters` section.
|
2010-06-12 15:37:54 -03:00
|
|
|
|
|
|
|
Note the difference between ``'@'`` and ``'='``: both use native byte order, but
|
|
|
|
the size and alignment of the latter is standardized.
|
|
|
|
|
2020-09-11 12:20:12 -03:00
|
|
|
The form ``'!'`` represents the network byte order which is always big-endian
|
|
|
|
as defined in `IETF RFC 1700 <IETF RFC 1700_>`_.
|
2010-06-12 15:37:54 -03:00
|
|
|
|
|
|
|
There is no way to indicate non-native byte order (force byte-swapping); use the
|
|
|
|
appropriate choice of ``'<'`` or ``'>'``.
|
|
|
|
|
|
|
|
Notes:
|
|
|
|
|
|
|
|
(1) Padding is only automatically added between successive structure members.
|
|
|
|
No padding is added at the beginning or the end of the encoded struct.
|
|
|
|
|
|
|
|
(2) No padding is added when using non-native size and alignment, e.g.
|
|
|
|
with '<', '>', '=', and '!'.
|
|
|
|
|
|
|
|
(3) To align the end of a structure to the alignment requirement of a
|
|
|
|
particular type, end the format with the code for that type with a repeat
|
|
|
|
count of zero. See :ref:`struct-examples`.
|
|
|
|
|
|
|
|
|
|
|
|
.. _format-characters:
|
2010-04-12 18:00:59 -03:00
|
|
|
|
|
|
|
Format Characters
|
|
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
|
2007-08-15 11:28:22 -03:00
|
|
|
Format characters have the following meaning; the conversion between C and
|
2010-06-29 17:10:42 -03:00
|
|
|
Python values should be obvious given their types. The 'Standard size' column
|
|
|
|
refers to the size of the packed value in bytes when using standard size; that
|
|
|
|
is, when the format string starts with one of ``'<'``, ``'>'``, ``'!'`` or
|
|
|
|
``'='``. When using native size, the size of the packed value is
|
|
|
|
platform-dependent.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
|
|
|
| Format | C Type | Python type | Standard size | Notes |
|
|
|
|
+========+==========================+====================+================+============+
|
2022-10-28 07:21:28 -03:00
|
|
|
| ``x`` | pad byte | no value | | \(7) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``c`` | :c:expr:`char` | bytes of length 1 | 1 | |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``b`` | :c:expr:`signed char` | integer | 1 | \(1), \(2) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``B`` | :c:expr:`unsigned char` | integer | 1 | \(2) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``?`` | :c:expr:`_Bool` | bool | 1 | \(1) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``h`` | :c:expr:`short` | integer | 2 | \(2) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``H`` | :c:expr:`unsigned short` | integer | 2 | \(2) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``i`` | :c:expr:`int` | integer | 4 | \(2) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``I`` | :c:expr:`unsigned int` | integer | 4 | \(2) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``l`` | :c:expr:`long` | integer | 4 | \(2) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``L`` | :c:expr:`unsigned long` | integer | 4 | \(2) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``q`` | :c:expr:`long long` | integer | 8 | \(2) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``Q`` | :c:expr:`unsigned long | integer | 8 | \(2) |
|
2010-10-06 07:11:56 -03:00
|
|
|
| | long` | | | |
|
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2023-07-22 15:35:22 -03:00
|
|
|
| ``n`` | :c:type:`ssize_t` | integer | | \(3) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2023-07-22 15:35:22 -03:00
|
|
|
| ``N`` | :c:type:`size_t` | integer | | \(3) |
|
2011-10-06 10:27:40 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2019-08-22 12:28:28 -03:00
|
|
|
| ``e`` | \(6) | float | 2 | \(4) |
|
2016-09-03 13:21:29 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``f`` | :c:expr:`float` | float | 4 | \(4) |
|
2011-10-06 10:27:40 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``d`` | :c:expr:`double` | float | 8 | \(4) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-11-22 14:06:36 -04:00
|
|
|
| ``s`` | :c:expr:`char[]` | bytes | | \(9) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-11-22 14:06:36 -04:00
|
|
|
| ``p`` | :c:expr:`char[]` | bytes | | \(8) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2022-10-05 15:01:14 -03:00
|
|
|
| ``P`` | :c:expr:`void \*` | integer | | \(5) |
|
2010-10-06 07:11:56 -03:00
|
|
|
+--------+--------------------------+--------------------+----------------+------------+
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2011-10-06 10:27:40 -03:00
|
|
|
.. versionchanged:: 3.3
|
|
|
|
Added support for the ``'n'`` and ``'N'`` formats.
|
|
|
|
|
2016-11-10 14:25:26 -04:00
|
|
|
.. versionchanged:: 3.6
|
|
|
|
Added support for the ``'e'`` format.
|
|
|
|
|
|
|
|
|
2007-08-15 11:28:22 -03:00
|
|
|
Notes:
|
|
|
|
|
|
|
|
(1)
|
2018-10-28 08:41:26 -03:00
|
|
|
.. index:: single: ? (question mark); in struct format strings
|
|
|
|
|
2022-10-05 15:01:14 -03:00
|
|
|
The ``'?'`` conversion code corresponds to the :c:expr:`_Bool` type defined by
|
|
|
|
C99. If this type is not available, it is simulated using a :c:expr:`char`. In
|
2007-08-15 11:28:22 -03:00
|
|
|
standard mode, it is always represented by one byte.
|
|
|
|
|
2010-12-28 09:26:42 -04:00
|
|
|
(2)
|
2010-04-03 12:54:36 -03:00
|
|
|
When attempting to pack a non-integer using any of the integer conversion
|
2023-06-30 11:27:09 -03:00
|
|
|
codes, if the non-integer has a :meth:`~object.__index__` method then that method is
|
2010-04-03 12:54:36 -03:00
|
|
|
called to convert the argument to an integer before packing.
|
|
|
|
|
|
|
|
.. versionchanged:: 3.2
|
2023-06-30 11:27:09 -03:00
|
|
|
Added use of the :meth:`~object.__index__` method for non-integers.
|
2010-04-03 12:54:36 -03:00
|
|
|
|
2019-08-22 12:28:28 -03:00
|
|
|
(3)
|
2011-10-06 10:27:40 -03:00
|
|
|
The ``'n'`` and ``'N'`` conversion codes are only available for the native
|
|
|
|
size (selected as the default or with the ``'@'`` byte order character).
|
|
|
|
For the standard size, you can use whichever of the other integer formats
|
|
|
|
fits your application.
|
|
|
|
|
2019-08-22 12:28:28 -03:00
|
|
|
(4)
|
2016-09-03 13:21:29 -03:00
|
|
|
For the ``'f'``, ``'d'`` and ``'e'`` conversion codes, the packed
|
|
|
|
representation uses the IEEE 754 binary32, binary64 or binary16 format (for
|
|
|
|
``'f'``, ``'d'`` or ``'e'`` respectively), regardless of the floating-point
|
|
|
|
format used by the platform.
|
2010-06-15 05:42:37 -03:00
|
|
|
|
2019-08-22 12:28:28 -03:00
|
|
|
(5)
|
2010-06-15 05:42:37 -03:00
|
|
|
The ``'P'`` format character is only available for the native byte ordering
|
|
|
|
(selected as the default or with the ``'@'`` byte order character). The byte
|
|
|
|
order character ``'='`` chooses to use little- or big-endian ordering based
|
|
|
|
on the host system. The struct module does not interpret this as native
|
|
|
|
ordering, so the ``'P'`` format is not available.
|
|
|
|
|
2019-08-22 12:28:28 -03:00
|
|
|
(6)
|
2016-09-03 13:21:29 -03:00
|
|
|
The IEEE 754 binary16 "half precision" type was introduced in the 2008
|
|
|
|
revision of the `IEEE 754 standard <ieee 754 standard_>`_. It has a sign
|
|
|
|
bit, a 5-bit exponent and 11-bit precision (with 10 bits explicitly stored),
|
|
|
|
and can represent numbers between approximately ``6.1e-05`` and ``6.5e+04``
|
|
|
|
at full precision. This type is not widely supported by C compilers: on a
|
|
|
|
typical machine, an unsigned short can be used for storage, but not for math
|
|
|
|
operations. See the Wikipedia page on the `half-precision floating-point
|
|
|
|
format <half precision format_>`_ for more information.
|
|
|
|
|
2022-10-28 07:21:28 -03:00
|
|
|
(7)
|
2022-11-22 14:06:36 -04:00
|
|
|
When packing, ``'x'`` inserts one NUL byte.
|
|
|
|
|
|
|
|
(8)
|
|
|
|
The ``'p'`` format character encodes a "Pascal string", meaning a short
|
|
|
|
variable-length string stored in a *fixed number of bytes*, given by the count.
|
|
|
|
The first byte stored is the length of the string, or 255, whichever is
|
|
|
|
smaller. The bytes of the string follow. If the string passed in to
|
|
|
|
:func:`pack` is too long (longer than the count minus 1), only the leading
|
|
|
|
``count-1`` bytes of the string are stored. If the string is shorter than
|
|
|
|
``count-1``, it is padded with null bytes so that exactly count bytes in all
|
|
|
|
are used. Note that for :func:`unpack`, the ``'p'`` format character consumes
|
|
|
|
``count`` bytes, but that the string returned can never contain more than 255
|
|
|
|
bytes.
|
|
|
|
|
|
|
|
(9)
|
|
|
|
For the ``'s'`` format character, the count is interpreted as the length of the
|
|
|
|
bytes, not a repeat count like for the other format characters; for example,
|
|
|
|
``'10s'`` means a single 10-byte string mapping to or from a single
|
|
|
|
Python byte string, while ``'10c'`` means 10
|
|
|
|
separate one byte character elements (e.g., ``cccccccccc``) mapping
|
|
|
|
to or from ten different Python byte objects. (See :ref:`struct-examples`
|
|
|
|
for a concrete demonstration of the difference.)
|
|
|
|
If a count is not given, it defaults to 1. For packing, the string is
|
|
|
|
truncated or padded with null bytes as appropriate to make it fit. For
|
|
|
|
unpacking, the resulting bytes object always has exactly the specified number
|
|
|
|
of bytes. As a special case, ``'0s'`` means a single, empty string (while
|
|
|
|
``'0c'`` means 0 characters).
|
2010-04-03 12:54:36 -03:00
|
|
|
|
2007-08-15 11:28:22 -03:00
|
|
|
A format character may be preceded by an integral repeat count. For example,
|
|
|
|
the format string ``'4h'`` means exactly the same as ``'hhhh'``.
|
|
|
|
|
|
|
|
Whitespace characters between formats are ignored; a count and its format must
|
|
|
|
not contain whitespace though.
|
|
|
|
|
2009-03-29 13:58:21 -03:00
|
|
|
When packing a value ``x`` using one of the integer formats (``'b'``,
|
|
|
|
``'B'``, ``'h'``, ``'H'``, ``'i'``, ``'I'``, ``'l'``, ``'L'``,
|
|
|
|
``'q'``, ``'Q'``), if ``x`` is outside the valid range for that format
|
|
|
|
then :exc:`struct.error` is raised.
|
|
|
|
|
|
|
|
.. versionchanged:: 3.1
|
2020-02-10 16:17:54 -04:00
|
|
|
Previously, some of the integer formats wrapped out-of-range values and
|
2009-03-29 13:58:21 -03:00
|
|
|
raised :exc:`DeprecationWarning` instead of :exc:`struct.error`.
|
|
|
|
|
2018-10-28 08:41:26 -03:00
|
|
|
.. index:: single: ? (question mark); in struct format strings
|
|
|
|
|
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r61239 | andrew.kuchling | 2008-03-05 01:44:41 +0100 (Wed, 05 Mar 2008) | 1 line
Add more items; add fragmentary notes
........
r61240 | amaury.forgeotdarc | 2008-03-05 02:50:33 +0100 (Wed, 05 Mar 2008) | 13 lines
Issue#2238: some syntax errors from *args or **kwargs expressions
would give bogus error messages, because of untested exceptions::
>>> f(**g(1=2))
XXX undetected error
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
instead of the expected SyntaxError: keyword can't be an expression
Will backport.
........
r61241 | neal.norwitz | 2008-03-05 06:10:48 +0100 (Wed, 05 Mar 2008) | 3 lines
Remove the files/dirs after closing the DB so the tests work on Windows.
Patch from Trent Nelson. Also simplified removing a file by using test_support.
........
r61242 | neal.norwitz | 2008-03-05 06:14:18 +0100 (Wed, 05 Mar 2008) | 3 lines
Get this test to pass even when there is no sound card in the system.
Patch from Trent Nelson. (I can't test this.)
........
r61243 | neal.norwitz | 2008-03-05 06:20:44 +0100 (Wed, 05 Mar 2008) | 3 lines
Catch OSError when trying to remove a file in case removal fails. This
should prevent a failure in tearDown masking any real test failure.
........
r61244 | neal.norwitz | 2008-03-05 06:38:06 +0100 (Wed, 05 Mar 2008) | 5 lines
Make the timeout longer to give slow machines a chance to pass the test
before timing out. This doesn't change the duration of the test under
normal circumstances. This is targetted at fixing the spurious failures
on the FreeBSD buildbot primarily.
........
r61245 | neal.norwitz | 2008-03-05 06:49:03 +0100 (Wed, 05 Mar 2008) | 1 line
Tabs -> spaces
........
r61246 | neal.norwitz | 2008-03-05 06:50:20 +0100 (Wed, 05 Mar 2008) | 1 line
Use -u urlfetch to run more tests
........
r61247 | neal.norwitz | 2008-03-05 06:51:20 +0100 (Wed, 05 Mar 2008) | 1 line
test_smtplib sometimes reports leaks too, suppress it
........
r61248 | jeffrey.yasskin | 2008-03-05 07:19:56 +0100 (Wed, 05 Mar 2008) | 5 lines
Fix test_socketserver on Windows after r61099 added several signal.alarm()
calls (which don't exist on non-Unix platforms).
Thanks to Trent Nelson for the report and patch.
........
r61249 | georg.brandl | 2008-03-05 08:10:35 +0100 (Wed, 05 Mar 2008) | 2 lines
Fix some rst.
........
r61252 | thomas.heller | 2008-03-05 15:53:39 +0100 (Wed, 05 Mar 2008) | 2 lines
News entry for yesterdays commit.
........
r61253 | thomas.heller | 2008-03-05 16:34:29 +0100 (Wed, 05 Mar 2008) | 3 lines
Issue 1872: Changed the struct module typecode from 't' to '?', for
compatibility with PEP3118.
........
r61254 | skip.montanaro | 2008-03-05 17:41:09 +0100 (Wed, 05 Mar 2008) | 4 lines
Elaborate on the role of the altinstall target when installing multiple
versions.
........
r61255 | georg.brandl | 2008-03-05 20:31:44 +0100 (Wed, 05 Mar 2008) | 2 lines
#2239: PYTHONPATH delimiter is os.pathsep.
........
r61256 | raymond.hettinger | 2008-03-05 21:59:58 +0100 (Wed, 05 Mar 2008) | 1 line
C implementation of itertools.permutations().
........
r61257 | raymond.hettinger | 2008-03-05 22:04:32 +0100 (Wed, 05 Mar 2008) | 1 line
Small code cleanup.
........
r61260 | martin.v.loewis | 2008-03-05 23:24:31 +0100 (Wed, 05 Mar 2008) | 2 lines
cd PCbuild only after deleting all pyc files.
........
r61261 | raymond.hettinger | 2008-03-06 02:15:52 +0100 (Thu, 06 Mar 2008) | 1 line
Add examples.
........
r61262 | andrew.kuchling | 2008-03-06 02:36:27 +0100 (Thu, 06 Mar 2008) | 1 line
Add two items
........
r61263 | georg.brandl | 2008-03-06 07:47:18 +0100 (Thu, 06 Mar 2008) | 2 lines
#1725737: ignore other VC directories other than CVS and SVN's too.
........
r61264 | martin.v.loewis | 2008-03-06 07:55:22 +0100 (Thu, 06 Mar 2008) | 4 lines
Patch #2232: os.tmpfile might fail on Windows if the user has no
permission to create files in the root directory.
Will backport to 2.5.
........
r61269 | georg.brandl | 2008-03-06 08:19:15 +0100 (Thu, 06 Mar 2008) | 2 lines
Expand on re.split behavior with captured expressions.
........
r61270 | georg.brandl | 2008-03-06 08:22:09 +0100 (Thu, 06 Mar 2008) | 2 lines
Little clarification of assignments.
........
r61271 | georg.brandl | 2008-03-06 08:31:34 +0100 (Thu, 06 Mar 2008) | 2 lines
Add isinstance/issubclass to tutorial.
........
r61272 | georg.brandl | 2008-03-06 08:34:52 +0100 (Thu, 06 Mar 2008) | 2 lines
Add missing NEWS entry for r61263.
........
r61273 | georg.brandl | 2008-03-06 08:41:16 +0100 (Thu, 06 Mar 2008) | 2 lines
#2225: return nonzero status code from py_compile if not all files could be compiled.
........
r61274 | georg.brandl | 2008-03-06 08:43:02 +0100 (Thu, 06 Mar 2008) | 2 lines
#2220: handle matching failure more gracefully.
........
r61275 | georg.brandl | 2008-03-06 08:45:52 +0100 (Thu, 06 Mar 2008) | 2 lines
Bug #2220: handle rlcompleter attribute match failure more gracefully.
........
r61278 | martin.v.loewis | 2008-03-06 14:49:47 +0100 (Thu, 06 Mar 2008) | 1 line
Rely on x64 platform configuration when building _bsddb on AMD64.
........
r61279 | martin.v.loewis | 2008-03-06 14:50:28 +0100 (Thu, 06 Mar 2008) | 1 line
Update db-4.4.20 build procedure.
........
r61285 | raymond.hettinger | 2008-03-06 21:52:01 +0100 (Thu, 06 Mar 2008) | 1 line
More tests.
........
r61286 | raymond.hettinger | 2008-03-06 23:51:36 +0100 (Thu, 06 Mar 2008) | 1 line
Issue 2246: itertools grouper object did not participate in GC (should be backported).
........
r61288 | raymond.hettinger | 2008-03-07 02:33:20 +0100 (Fri, 07 Mar 2008) | 1 line
Tweak recipes and tests
........
r61289 | jeffrey.yasskin | 2008-03-07 07:22:15 +0100 (Fri, 07 Mar 2008) | 5 lines
Progress on issue #1193577 by adding a polling .shutdown() method to
SocketServers. The core of the patch was written by Pedro Werneck, but any bugs
are mine. I've also rearranged the code for timeouts in order to avoid
interfering with the shutdown poll.
........
r61290 | nick.coghlan | 2008-03-07 15:13:28 +0100 (Fri, 07 Mar 2008) | 1 line
Speed up with statements by storing the __exit__ method on the stack instead of in a temp variable (bumps the magic number for pyc files)
........
r61298 | andrew.kuchling | 2008-03-07 22:09:23 +0100 (Fri, 07 Mar 2008) | 1 line
Grammar fix
........
r61303 | georg.brandl | 2008-03-08 10:54:06 +0100 (Sat, 08 Mar 2008) | 2 lines
#2253: fix continue vs. finally docs.
........
r61304 | marc-andre.lemburg | 2008-03-08 11:01:43 +0100 (Sat, 08 Mar 2008) | 3 lines
Add new name for Mandrake: Mandriva.
........
r61305 | georg.brandl | 2008-03-08 11:05:24 +0100 (Sat, 08 Mar 2008) | 2 lines
#1533486: fix types in refcount intro.
........
r61312 | facundo.batista | 2008-03-08 17:50:27 +0100 (Sat, 08 Mar 2008) | 5 lines
Issue 1106316. post_mortem()'s parameter, traceback, is now
optional: it defaults to the traceback of the exception that is currently
being handled.
........
r61313 | jeffrey.yasskin | 2008-03-08 19:26:54 +0100 (Sat, 08 Mar 2008) | 2 lines
Add tests for with and finally performance to pybench.
........
r61314 | jeffrey.yasskin | 2008-03-08 21:08:21 +0100 (Sat, 08 Mar 2008) | 2 lines
Fix pybench for pythons < 2.6, tested back to 2.3.
........
r61317 | jeffrey.yasskin | 2008-03-08 22:35:15 +0100 (Sat, 08 Mar 2008) | 3 lines
Well that was dumb. platform.python_implementation returns a function, not a
string.
........
r61329 | georg.brandl | 2008-03-09 16:11:39 +0100 (Sun, 09 Mar 2008) | 2 lines
#2249: document assertTrue and assertFalse.
........
r61332 | neal.norwitz | 2008-03-09 20:03:42 +0100 (Sun, 09 Mar 2008) | 4 lines
Introduce a lock to fix a race condition which caused an exception in the test.
Some buildbots were consistently failing (e.g., amd64).
Also remove a couple of semi-colons.
........
r61344 | raymond.hettinger | 2008-03-11 01:19:07 +0100 (Tue, 11 Mar 2008) | 1 line
Add recipe to docs.
........
r61350 | guido.van.rossum | 2008-03-11 22:18:06 +0100 (Tue, 11 Mar 2008) | 3 lines
Fix the overflows in expandtabs(). "This time for sure!"
(Exploit at request.)
........
r61351 | raymond.hettinger | 2008-03-11 22:37:46 +0100 (Tue, 11 Mar 2008) | 1 line
Improve docs for itemgetter(). Show that it works with slices.
........
r61363 | georg.brandl | 2008-03-13 08:15:56 +0100 (Thu, 13 Mar 2008) | 2 lines
#2265: fix example.
........
r61364 | georg.brandl | 2008-03-13 08:17:14 +0100 (Thu, 13 Mar 2008) | 2 lines
#2270: fix typo.
........
r61365 | georg.brandl | 2008-03-13 08:21:41 +0100 (Thu, 13 Mar 2008) | 2 lines
#1720705: add docs about import/threading interaction, wording by Nick.
........
r61366 | andrew.kuchling | 2008-03-13 12:07:35 +0100 (Thu, 13 Mar 2008) | 1 line
Add class decorators
........
r61367 | raymond.hettinger | 2008-03-13 17:43:17 +0100 (Thu, 13 Mar 2008) | 1 line
Add 2-to-3 support for the itertools moved to builtins or renamed.
........
r61368 | raymond.hettinger | 2008-03-13 17:43:59 +0100 (Thu, 13 Mar 2008) | 1 line
Consistent tense.
........
r61369 | raymond.hettinger | 2008-03-13 20:03:51 +0100 (Thu, 13 Mar 2008) | 1 line
Issue 2274: Add heapq.heappushpop().
........
r61370 | raymond.hettinger | 2008-03-13 20:33:34 +0100 (Thu, 13 Mar 2008) | 1 line
Simplify the nlargest() code using heappushpop().
........
r61371 | brett.cannon | 2008-03-13 21:27:00 +0100 (Thu, 13 Mar 2008) | 4 lines
Move test_thread over to unittest. Commits GHOP 237.
Thanks Benjamin Peterson for the patch.
........
r61372 | brett.cannon | 2008-03-13 21:33:10 +0100 (Thu, 13 Mar 2008) | 4 lines
Move test_tokenize to doctest.
Done as GHOP 238 by Josip Dzolonga.
........
r61373 | brett.cannon | 2008-03-13 21:47:41 +0100 (Thu, 13 Mar 2008) | 4 lines
Convert test_contains, test_crypt, and test_select to unittest.
Patch from GHOP 294 by David Marek.
........
r61374 | brett.cannon | 2008-03-13 22:02:16 +0100 (Thu, 13 Mar 2008) | 4 lines
Move test_gdbm to use unittest.
Closes issue #1960. Thanks Giampaolo Rodola.
........
r61375 | brett.cannon | 2008-03-13 22:09:28 +0100 (Thu, 13 Mar 2008) | 4 lines
Convert test_fcntl to unittest.
Closes issue #2055. Thanks Giampaolo Rodola.
........
r61376 | raymond.hettinger | 2008-03-14 06:03:44 +0100 (Fri, 14 Mar 2008) | 1 line
Leave heapreplace() unchanged.
........
r61378 | martin.v.loewis | 2008-03-14 14:56:09 +0100 (Fri, 14 Mar 2008) | 2 lines
Patch #2284: add -x64 option to rt.bat.
........
r61379 | martin.v.loewis | 2008-03-14 14:57:59 +0100 (Fri, 14 Mar 2008) | 2 lines
Use -x64 flag.
........
r61382 | brett.cannon | 2008-03-14 15:03:10 +0100 (Fri, 14 Mar 2008) | 2 lines
Remove a bad test.
........
r61383 | mark.dickinson | 2008-03-14 15:23:37 +0100 (Fri, 14 Mar 2008) | 9 lines
Issue 705836: Fix struct.pack(">f", 1e40) to behave consistently
across platforms: it should now raise OverflowError on all
platforms. (Previously it raised OverflowError only on
non IEEE 754 platforms.)
Also fix the (already existing) test for this behaviour
so that it actually raises TestFailed instead of just
referencing it.
........
r61387 | thomas.heller | 2008-03-14 22:06:21 +0100 (Fri, 14 Mar 2008) | 1 line
Remove unneeded initializer.
........
r61388 | martin.v.loewis | 2008-03-14 22:19:28 +0100 (Fri, 14 Mar 2008) | 2 lines
Run debug version, cd to PCbuild.
........
r61392 | georg.brandl | 2008-03-15 00:10:34 +0100 (Sat, 15 Mar 2008) | 2 lines
Remove obsolete paragraph. #2288.
........
r61395 | georg.brandl | 2008-03-15 01:20:19 +0100 (Sat, 15 Mar 2008) | 2 lines
Fix lots of broken links in the docs, found by Sphinx' external link checker.
........
r61396 | skip.montanaro | 2008-03-15 03:32:49 +0100 (Sat, 15 Mar 2008) | 1 line
note that fork and forkpty raise OSError on failure
........
r61402 | skip.montanaro | 2008-03-15 17:04:45 +0100 (Sat, 15 Mar 2008) | 1 line
add %f format to datetime - issue 1158
........
r61403 | skip.montanaro | 2008-03-15 17:07:11 +0100 (Sat, 15 Mar 2008) | 2 lines
.
........
2008-03-15 21:07:10 -03:00
|
|
|
For the ``'?'`` format character, the return value is either :const:`True` or
|
2007-08-15 11:28:22 -03:00
|
|
|
:const:`False`. When packing, the truth value of the argument object is used.
|
|
|
|
Either 0 or 1 in the native or standard bool representation will be packed, and
|
2013-11-29 06:17:13 -04:00
|
|
|
any non-zero value will be ``True`` when unpacking.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2010-04-12 18:00:59 -03:00
|
|
|
|
|
|
|
|
|
|
|
.. _struct-examples:
|
|
|
|
|
|
|
|
Examples
|
|
|
|
^^^^^^^^
|
|
|
|
|
|
|
|
.. note::
|
2022-11-22 14:06:36 -04:00
|
|
|
Native byte order examples (designated by the ``'@'`` format prefix or
|
|
|
|
lack of any prefix character) may not match what the reader's
|
|
|
|
machine produces as
|
|
|
|
that depends on the platform and compiler.
|
|
|
|
|
|
|
|
Pack and unpack integers of three different sizes, using big endian
|
|
|
|
ordering::
|
2010-04-12 18:00:59 -03:00
|
|
|
|
2022-11-22 14:06:36 -04:00
|
|
|
>>> from struct import *
|
|
|
|
>>> pack(">bhl", 1, 2, 3)
|
|
|
|
b'\x01\x00\x02\x00\x00\x00\x03'
|
2023-02-22 19:55:03 -04:00
|
|
|
>>> unpack('>bhl', b'\x01\x00\x02\x00\x00\x00\x03')
|
2022-11-22 14:06:36 -04:00
|
|
|
(1, 2, 3)
|
|
|
|
>>> calcsize('>bhl')
|
|
|
|
7
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2022-11-22 14:06:36 -04:00
|
|
|
Attempt to pack an integer which is too large for the defined field::
|
|
|
|
|
|
|
|
>>> pack(">h", 99999)
|
|
|
|
Traceback (most recent call last):
|
|
|
|
File "<stdin>", line 1, in <module>
|
|
|
|
struct.error: 'h' format requires -32768 <= number <= 32767
|
|
|
|
|
|
|
|
Demonstrate the difference between ``'s'`` and ``'c'`` format
|
|
|
|
characters::
|
|
|
|
|
|
|
|
>>> pack("@ccc", b'1', b'2', b'3')
|
|
|
|
b'123'
|
|
|
|
>>> pack("@3s", b'123')
|
|
|
|
b'123'
|
2007-08-15 11:28:22 -03:00
|
|
|
|
Merged revisions 63542-63544,63546,63553,63563-63564,63567,63569,63576 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r63542 | mark.dickinson | 2008-05-22 20:35:30 -0500 (Thu, 22 May 2008) | 5 lines
Issue #2819: Add math.sum, a function that sums a sequence of floats
efficiently but with no intermediate loss of precision. Based on
Raymond Hettinger's ASPN recipe. Thanks Jean Brouwers for the patch.
........
r63543 | mark.dickinson | 2008-05-22 21:36:48 -0500 (Thu, 22 May 2008) | 2 lines
Add tests for math.sum (Issue #2819)
........
r63544 | mark.dickinson | 2008-05-22 22:30:01 -0500 (Thu, 22 May 2008) | 2 lines
Better error reporting in test_math.py
........
r63546 | raymond.hettinger | 2008-05-22 23:32:43 -0500 (Thu, 22 May 2008) | 1 line
Tweak the comments and formatting.
........
r63553 | mark.dickinson | 2008-05-23 07:07:36 -0500 (Fri, 23 May 2008) | 3 lines
Skip math.sum tests on non IEEE 754 platforms, and on IEEE 754 platforms
that exhibit the problem described in issue #2937.
........
r63563 | martin.v.loewis | 2008-05-23 10:18:28 -0500 (Fri, 23 May 2008) | 3 lines
Issue #1390: Raise ValueError in toxml when an invalid comment would
otherwise be produced.
........
r63564 | raymond.hettinger | 2008-05-23 12:21:44 -0500 (Fri, 23 May 2008) | 1 line
Issue 2909: show how to name unpacked fields.
........
r63567 | raymond.hettinger | 2008-05-23 12:34:34 -0500 (Fri, 23 May 2008) | 1 line
Fix typo
........
r63569 | martin.v.loewis | 2008-05-23 14:33:13 -0500 (Fri, 23 May 2008) | 3 lines
Mention that the leaking of variables from list comprehensions
is fixed in 3.0.
........
r63576 | martin.v.loewis | 2008-05-24 04:36:45 -0500 (Sat, 24 May 2008) | 3 lines
Don't try to get the window size if it was never set before.
Fixes the test failure on Solaris.
........
2008-05-26 14:36:47 -03:00
|
|
|
Unpacked fields can be named by assigning them to variables or by wrapping
|
|
|
|
the result in a named tuple::
|
|
|
|
|
2008-07-31 12:03:40 -03:00
|
|
|
>>> record = b'raymond \x32\x12\x08\x01\x08'
|
Merged revisions 63542-63544,63546,63553,63563-63564,63567,63569,63576 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r63542 | mark.dickinson | 2008-05-22 20:35:30 -0500 (Thu, 22 May 2008) | 5 lines
Issue #2819: Add math.sum, a function that sums a sequence of floats
efficiently but with no intermediate loss of precision. Based on
Raymond Hettinger's ASPN recipe. Thanks Jean Brouwers for the patch.
........
r63543 | mark.dickinson | 2008-05-22 21:36:48 -0500 (Thu, 22 May 2008) | 2 lines
Add tests for math.sum (Issue #2819)
........
r63544 | mark.dickinson | 2008-05-22 22:30:01 -0500 (Thu, 22 May 2008) | 2 lines
Better error reporting in test_math.py
........
r63546 | raymond.hettinger | 2008-05-22 23:32:43 -0500 (Thu, 22 May 2008) | 1 line
Tweak the comments and formatting.
........
r63553 | mark.dickinson | 2008-05-23 07:07:36 -0500 (Fri, 23 May 2008) | 3 lines
Skip math.sum tests on non IEEE 754 platforms, and on IEEE 754 platforms
that exhibit the problem described in issue #2937.
........
r63563 | martin.v.loewis | 2008-05-23 10:18:28 -0500 (Fri, 23 May 2008) | 3 lines
Issue #1390: Raise ValueError in toxml when an invalid comment would
otherwise be produced.
........
r63564 | raymond.hettinger | 2008-05-23 12:21:44 -0500 (Fri, 23 May 2008) | 1 line
Issue 2909: show how to name unpacked fields.
........
r63567 | raymond.hettinger | 2008-05-23 12:34:34 -0500 (Fri, 23 May 2008) | 1 line
Fix typo
........
r63569 | martin.v.loewis | 2008-05-23 14:33:13 -0500 (Fri, 23 May 2008) | 3 lines
Mention that the leaking of variables from list comprehensions
is fixed in 3.0.
........
r63576 | martin.v.loewis | 2008-05-24 04:36:45 -0500 (Sat, 24 May 2008) | 3 lines
Don't try to get the window size if it was never set before.
Fixes the test failure on Solaris.
........
2008-05-26 14:36:47 -03:00
|
|
|
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)
|
|
|
|
|
|
|
|
>>> from collections import namedtuple
|
|
|
|
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
|
2008-07-31 12:03:40 -03:00
|
|
|
>>> Student._make(unpack('<10sHHb', record))
|
|
|
|
Student(name=b'raymond ', serialnum=4658, school=264, gradelevel=8)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2022-11-22 14:06:36 -04:00
|
|
|
The ordering of format characters may have an impact on size in native
|
|
|
|
mode since padding is implicit. In standard mode, the user is
|
|
|
|
responsible for inserting any desired padding.
|
|
|
|
Note in
|
|
|
|
the first ``pack`` call below that three NUL bytes were added after the
|
|
|
|
packed ``'#'`` to align the following integer on a four-byte boundary.
|
|
|
|
In this example, the output was produced on a little endian machine::
|
|
|
|
|
|
|
|
>>> pack('@ci', b'#', 0x12131415)
|
|
|
|
b'#\x00\x00\x00\x15\x14\x13\x12'
|
|
|
|
>>> pack('@ic', 0x12131415, b'#')
|
|
|
|
b'\x15\x14\x13\x12#'
|
|
|
|
>>> calcsize('@ci')
|
2010-04-12 18:00:59 -03:00
|
|
|
8
|
2022-11-22 14:06:36 -04:00
|
|
|
>>> calcsize('@ic')
|
2010-04-12 18:00:59 -03:00
|
|
|
5
|
|
|
|
|
2022-11-22 14:06:36 -04:00
|
|
|
The following format ``'llh0l'`` results in two pad bytes being added
|
|
|
|
at the end, assuming the platform's longs are aligned on 4-byte boundaries::
|
2010-04-12 18:00:59 -03:00
|
|
|
|
2022-11-22 14:06:36 -04:00
|
|
|
>>> pack('@llh0l', 1, 2, 3)
|
2010-04-12 18:00:59 -03:00
|
|
|
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
|
|
|
|
|
|
|
|
|
2007-08-15 11:28:22 -03:00
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
Module :mod:`array`
|
|
|
|
Packed binary storage of homogeneous data.
|
|
|
|
|
2022-11-22 14:06:36 -04:00
|
|
|
Module :mod:`json`
|
|
|
|
JSON encoder and decoder.
|
|
|
|
|
|
|
|
Module :mod:`pickle`
|
|
|
|
Python object serialization.
|
|
|
|
|
|
|
|
|
|
|
|
.. _applications:
|
|
|
|
|
|
|
|
Applications
|
|
|
|
------------
|
|
|
|
|
|
|
|
Two main applications for the :mod:`struct` module exist, data
|
|
|
|
interchange between Python and C code within an application or another
|
|
|
|
application compiled using the same compiler (:ref:`native formats<struct-native-formats>`), and
|
|
|
|
data interchange between applications using agreed upon data layout
|
|
|
|
(:ref:`standard formats<struct-standard-formats>`). Generally speaking, the format strings
|
|
|
|
constructed for these two domains are distinct.
|
|
|
|
|
|
|
|
|
|
|
|
.. _struct-native-formats:
|
|
|
|
|
|
|
|
Native Formats
|
|
|
|
^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
When constructing format strings which mimic native layouts, the
|
|
|
|
compiler and machine architecture determine byte ordering and padding.
|
|
|
|
In such cases, the ``@`` format character should be used to specify
|
|
|
|
native byte ordering and data sizes. Internal pad bytes are normally inserted
|
|
|
|
automatically. It is possible that a zero-repeat format code will be
|
|
|
|
needed at the end of a format string to round up to the correct
|
2023-01-28 05:57:40 -04:00
|
|
|
byte boundary for proper alignment of consecutive chunks of data.
|
2022-11-22 14:06:36 -04:00
|
|
|
|
|
|
|
Consider these two simple examples (on a 64-bit, little-endian
|
|
|
|
machine)::
|
|
|
|
|
|
|
|
>>> calcsize('@lhl')
|
|
|
|
24
|
|
|
|
>>> calcsize('@llh')
|
|
|
|
18
|
|
|
|
|
|
|
|
Data is not padded to an 8-byte boundary at the end of the second
|
|
|
|
format string without the use of extra padding. A zero-repeat format
|
|
|
|
code solves that problem::
|
|
|
|
|
|
|
|
>>> calcsize('@llh0l')
|
|
|
|
24
|
|
|
|
|
|
|
|
The ``'x'`` format code can be used to specify the repeat, but for
|
|
|
|
native formats it is better to use a zero-repeat format like ``'0l'``.
|
|
|
|
|
|
|
|
By default, native byte ordering and alignment is used, but it is
|
|
|
|
better to be explicit and use the ``'@'`` prefix character.
|
|
|
|
|
|
|
|
|
|
|
|
.. _struct-standard-formats:
|
|
|
|
|
|
|
|
Standard Formats
|
|
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
When exchanging data beyond your process such as networking or storage,
|
|
|
|
be precise. Specify the exact byte order, size, and alignment. Do
|
|
|
|
not assume they match the native order of a particular machine.
|
|
|
|
For example, network byte order is big-endian, while many popular CPUs
|
|
|
|
are little-endian. By defining this explicitly, the user need not
|
|
|
|
care about the specifics of the platform their code is running on.
|
|
|
|
The first character should typically be ``<`` or ``>``
|
|
|
|
(or ``!``). Padding is the responsibility of the programmer. The
|
|
|
|
zero-repeat format character won't work. Instead, the user must
|
|
|
|
explicitly add ``'x'`` pad bytes where needed. Revisiting the
|
|
|
|
examples from the previous section, we have::
|
|
|
|
|
|
|
|
>>> calcsize('<qh6xq')
|
|
|
|
24
|
|
|
|
>>> pack('<qh6xq', 1, 2, 3) == pack('@lhl', 1, 2, 3)
|
|
|
|
True
|
|
|
|
>>> calcsize('@llh')
|
|
|
|
18
|
|
|
|
>>> pack('@llh', 1, 2, 3) == pack('<qqh', 1, 2, 3)
|
|
|
|
True
|
|
|
|
>>> calcsize('<qqh6x')
|
|
|
|
24
|
|
|
|
>>> calcsize('@llh0l')
|
|
|
|
24
|
|
|
|
>>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3)
|
|
|
|
True
|
|
|
|
|
|
|
|
The above results (executed on a 64-bit machine) aren't guaranteed to
|
|
|
|
match when executed on different machines. For example, the examples
|
|
|
|
below were executed on a 32-bit machine::
|
|
|
|
|
|
|
|
>>> calcsize('<qqh6x')
|
|
|
|
24
|
|
|
|
>>> calcsize('@llh0l')
|
|
|
|
12
|
|
|
|
>>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3)
|
|
|
|
False
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
|
|
|
.. _struct-objects:
|
|
|
|
|
2010-06-12 15:37:54 -03:00
|
|
|
Classes
|
2010-04-12 18:00:59 -03:00
|
|
|
-------
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
The :mod:`struct` module also defines the following type:
|
|
|
|
|
|
|
|
|
|
|
|
.. class:: Struct(format)
|
|
|
|
|
2010-04-12 18:00:59 -03:00
|
|
|
Return a new Struct object which writes and reads binary data according to
|
2022-11-22 14:06:36 -04:00
|
|
|
the format string *format*. Creating a ``Struct`` object once and calling its
|
|
|
|
methods is more efficient than calling module-level functions with the
|
|
|
|
same format since the format string is only compiled once.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2018-09-11 01:37:33 -03:00
|
|
|
.. note::
|
|
|
|
|
|
|
|
The compiled versions of the most recent format strings passed to
|
2022-12-31 12:57:58 -04:00
|
|
|
the module-level functions are cached, so programs that use only a few
|
|
|
|
format strings needn't worry about reusing a single :class:`Struct`
|
|
|
|
instance.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2008-04-24 22:59:09 -03:00
|
|
|
Compiled Struct objects support the following methods and attributes:
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2008-04-24 22:59:09 -03:00
|
|
|
.. method:: pack(v1, v2, ...)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2008-04-24 22:59:09 -03:00
|
|
|
Identical to the :func:`pack` function, using the compiled format.
|
2016-04-15 20:03:54 -03:00
|
|
|
(``len(result)`` will equal :attr:`size`.)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
2008-04-24 22:59:09 -03:00
|
|
|
.. method:: pack_into(buffer, offset, v1, v2, ...)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2008-04-24 22:59:09 -03:00
|
|
|
Identical to the :func:`pack_into` function, using the compiled format.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
2010-06-12 13:30:53 -03:00
|
|
|
.. method:: unpack(buffer)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2008-04-24 22:59:09 -03:00
|
|
|
Identical to the :func:`unpack` function, using the compiled format.
|
2016-04-15 20:03:54 -03:00
|
|
|
The buffer's size in bytes must equal :attr:`size`.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
2009-09-16 12:58:14 -03:00
|
|
|
.. method:: unpack_from(buffer, offset=0)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2008-04-24 22:59:09 -03:00
|
|
|
Identical to the :func:`unpack_from` function, using the compiled format.
|
2018-03-10 14:58:52 -04:00
|
|
|
The buffer's size in bytes, starting at position *offset*, must be at least
|
2016-04-15 20:03:54 -03:00
|
|
|
:attr:`size`.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
2013-04-26 19:20:04 -03:00
|
|
|
.. method:: iter_unpack(buffer)
|
|
|
|
|
|
|
|
Identical to the :func:`iter_unpack` function, using the compiled format.
|
2016-04-15 20:03:54 -03:00
|
|
|
The buffer's size in bytes must be a multiple of :attr:`size`.
|
2013-04-26 19:20:04 -03:00
|
|
|
|
|
|
|
.. versionadded:: 3.4
|
|
|
|
|
2008-04-24 22:59:09 -03:00
|
|
|
.. attribute:: format
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2008-04-24 22:59:09 -03:00
|
|
|
The format string used to construct this Struct object.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2017-06-23 10:11:12 -03:00
|
|
|
.. versionchanged:: 3.7
|
|
|
|
The format string type is now :class:`str` instead of :class:`bytes`.
|
|
|
|
|
2008-04-24 22:59:09 -03:00
|
|
|
.. attribute:: size
|
Merged revisions 57221-57391 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r57227 | facundo.batista | 2007-08-20 17:16:21 -0700 (Mon, 20 Aug 2007) | 5 lines
Catch ProtocolError exceptions and include the header information in
test output (to make it easier to debug test failures caused by
problems in the server). [GSoC - Alan McIntyre]
........
r57229 | mark.hammond | 2007-08-20 18:04:47 -0700 (Mon, 20 Aug 2007) | 5 lines
[ 1761786 ] distutils.util.get_platform() return value on 64bit Windows
As discussed on distutils-sig: Allows the generated installer name on
64bit Windows platforms to be different than the name generated for
32bit Windows platforms.
........
r57230 | mark.hammond | 2007-08-20 18:05:16 -0700 (Mon, 20 Aug 2007) | 5 lines
[ 1761786 ] distutils.util.get_platform() return value on 64bit Windows
As discussed on distutils-sig: Allows the generated installer name on
64bit Windows platforms to be different than the name generated for
32bit Windows platforms.
........
r57253 | georg.brandl | 2007-08-20 23:01:18 -0700 (Mon, 20 Aug 2007) | 2 lines
Demand version 2.5.1 since 2.5 has a bug with codecs.open context managers.
........
r57254 | georg.brandl | 2007-08-20 23:03:43 -0700 (Mon, 20 Aug 2007) | 2 lines
Revert accidental checkins from last commit.
........
r57255 | georg.brandl | 2007-08-20 23:07:08 -0700 (Mon, 20 Aug 2007) | 2 lines
Bug #1777160: mention explicitly that e.g. -1**2 is -1.
........
r57256 | georg.brandl | 2007-08-20 23:12:19 -0700 (Mon, 20 Aug 2007) | 3 lines
Bug #1777168: replace operator names "opa"... with "op1"... and mark everything up as literal,
to enhance readability.
........
r57259 | facundo.batista | 2007-08-21 09:57:18 -0700 (Tue, 21 Aug 2007) | 8 lines
Added test for behavior of operations on an unconnected SMTP object,
and tests for NOOP, RSET, and VRFY. Corrected typo in a comment for
testNonnumericPort. Added a check for constructing SMTP objects when
non-numeric ports are included in the host name. Derived a server from
SMTPServer to test various ESMTP/SMTP capabilities. Check that a
second HELO to DebuggingServer returns an error. [GSoC - Alan McIntyre]
........
r57279 | skip.montanaro | 2007-08-22 12:02:16 -0700 (Wed, 22 Aug 2007) | 2 lines
Note that BeOS is unsupported as of Python 2.6.
........
r57280 | skip.montanaro | 2007-08-22 12:05:21 -0700 (Wed, 22 Aug 2007) | 1 line
whoops - need to check in configure as well
........
r57284 | alex.martelli | 2007-08-22 14:14:17 -0700 (Wed, 22 Aug 2007) | 5 lines
Fix compile.c so that it records 0.0 and -0.0 as separate constants in a code
object's co_consts tuple; add a test to show that the previous behavior (where
these two constants were "collapsed" into one) causes serious malfunctioning.
........
r57286 | gregory.p.smith | 2007-08-22 14:32:34 -0700 (Wed, 22 Aug 2007) | 3 lines
stop leaving log.0000001 __db.00* and xxx.db turds in developer
sandboxes when bsddb3 tests are run.
........
r57301 | jeffrey.yasskin | 2007-08-22 16:14:27 -0700 (Wed, 22 Aug 2007) | 3 lines
When setup.py fails to find the necessary bits to build some modules, have it
print a slightly more informative message.
........
r57320 | brett.cannon | 2007-08-23 07:53:17 -0700 (Thu, 23 Aug 2007) | 2 lines
Make test_runpy re-entrant.
........
r57324 | georg.brandl | 2007-08-23 10:54:11 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1768121: fix wrong/missing opcode docs.
........
r57326 | georg.brandl | 2007-08-23 10:57:05 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1766421: "return code" vs. "status code".
........
r57328 | georg.brandl | 2007-08-23 11:08:06 -0700 (Thu, 23 Aug 2007) | 2 lines
Second half of #1752175: #ifdef out references to PyImport_DynLoadFiletab if HAVE_DYNAMIC_LOADING is not defined.
........
r57331 | georg.brandl | 2007-08-23 11:11:33 -0700 (Thu, 23 Aug 2007) | 2 lines
Use try-except-finally in contextlib.
........
r57343 | georg.brandl | 2007-08-23 13:35:00 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1697820: document that the old slice protocol is still used by builtin types.
........
r57345 | georg.brandl | 2007-08-23 13:40:01 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1573854: fix docs for sqlite3 cursor rowcount attr.
........
r57347 | georg.brandl | 2007-08-23 13:50:23 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1694833: fix imp.find_module() docs wrt. packages.
........
r57348 | georg.brandl | 2007-08-23 13:53:28 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1594966: fix misleading usage example
........
r57349 | georg.brandl | 2007-08-23 13:55:44 -0700 (Thu, 23 Aug 2007) | 2 lines
Clarify wording a bit.
........
r57351 | georg.brandl | 2007-08-23 14:18:44 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1752332: httplib no longer uses socket.getaddrinfo().
........
r57352 | georg.brandl | 2007-08-23 14:21:36 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1734111: document struct.Struct.size.
........
r57353 | georg.brandl | 2007-08-23 14:27:57 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1688564: document os.path.join's absolute path behavior in the docstring.
........
r57354 | georg.brandl | 2007-08-23 14:36:05 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1625381: clarify match vs search introduction.
........
r57355 | georg.brandl | 2007-08-23 14:42:54 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1758696: more info about descriptors.
........
r57357 | georg.brandl | 2007-08-23 14:55:57 -0700 (Thu, 23 Aug 2007) | 2 lines
Patch #1779550: remove redundant code in logging.
........
r57378 | gregory.p.smith | 2007-08-23 22:11:38 -0700 (Thu, 23 Aug 2007) | 2 lines
Fix bug 1725856.
........
r57382 | georg.brandl | 2007-08-23 23:10:01 -0700 (Thu, 23 Aug 2007) | 2 lines
uuid creation is now threadsafe, backport from py3k rev. 57375.
........
r57389 | georg.brandl | 2007-08-24 04:47:37 -0700 (Fri, 24 Aug 2007) | 2 lines
Bug #1765375: fix stripping of unwanted LDFLAGS.
........
r57391 | guido.van.rossum | 2007-08-24 07:53:14 -0700 (Fri, 24 Aug 2007) | 2 lines
Fix silly typo in test name.
........
2007-08-24 13:32:05 -03:00
|
|
|
|
2010-06-12 13:30:53 -03:00
|
|
|
The calculated size of the struct (and hence of the bytes object produced
|
|
|
|
by the :meth:`pack` method) corresponding to :attr:`format`.
|
Merged revisions 57221-57391 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r57227 | facundo.batista | 2007-08-20 17:16:21 -0700 (Mon, 20 Aug 2007) | 5 lines
Catch ProtocolError exceptions and include the header information in
test output (to make it easier to debug test failures caused by
problems in the server). [GSoC - Alan McIntyre]
........
r57229 | mark.hammond | 2007-08-20 18:04:47 -0700 (Mon, 20 Aug 2007) | 5 lines
[ 1761786 ] distutils.util.get_platform() return value on 64bit Windows
As discussed on distutils-sig: Allows the generated installer name on
64bit Windows platforms to be different than the name generated for
32bit Windows platforms.
........
r57230 | mark.hammond | 2007-08-20 18:05:16 -0700 (Mon, 20 Aug 2007) | 5 lines
[ 1761786 ] distutils.util.get_platform() return value on 64bit Windows
As discussed on distutils-sig: Allows the generated installer name on
64bit Windows platforms to be different than the name generated for
32bit Windows platforms.
........
r57253 | georg.brandl | 2007-08-20 23:01:18 -0700 (Mon, 20 Aug 2007) | 2 lines
Demand version 2.5.1 since 2.5 has a bug with codecs.open context managers.
........
r57254 | georg.brandl | 2007-08-20 23:03:43 -0700 (Mon, 20 Aug 2007) | 2 lines
Revert accidental checkins from last commit.
........
r57255 | georg.brandl | 2007-08-20 23:07:08 -0700 (Mon, 20 Aug 2007) | 2 lines
Bug #1777160: mention explicitly that e.g. -1**2 is -1.
........
r57256 | georg.brandl | 2007-08-20 23:12:19 -0700 (Mon, 20 Aug 2007) | 3 lines
Bug #1777168: replace operator names "opa"... with "op1"... and mark everything up as literal,
to enhance readability.
........
r57259 | facundo.batista | 2007-08-21 09:57:18 -0700 (Tue, 21 Aug 2007) | 8 lines
Added test for behavior of operations on an unconnected SMTP object,
and tests for NOOP, RSET, and VRFY. Corrected typo in a comment for
testNonnumericPort. Added a check for constructing SMTP objects when
non-numeric ports are included in the host name. Derived a server from
SMTPServer to test various ESMTP/SMTP capabilities. Check that a
second HELO to DebuggingServer returns an error. [GSoC - Alan McIntyre]
........
r57279 | skip.montanaro | 2007-08-22 12:02:16 -0700 (Wed, 22 Aug 2007) | 2 lines
Note that BeOS is unsupported as of Python 2.6.
........
r57280 | skip.montanaro | 2007-08-22 12:05:21 -0700 (Wed, 22 Aug 2007) | 1 line
whoops - need to check in configure as well
........
r57284 | alex.martelli | 2007-08-22 14:14:17 -0700 (Wed, 22 Aug 2007) | 5 lines
Fix compile.c so that it records 0.0 and -0.0 as separate constants in a code
object's co_consts tuple; add a test to show that the previous behavior (where
these two constants were "collapsed" into one) causes serious malfunctioning.
........
r57286 | gregory.p.smith | 2007-08-22 14:32:34 -0700 (Wed, 22 Aug 2007) | 3 lines
stop leaving log.0000001 __db.00* and xxx.db turds in developer
sandboxes when bsddb3 tests are run.
........
r57301 | jeffrey.yasskin | 2007-08-22 16:14:27 -0700 (Wed, 22 Aug 2007) | 3 lines
When setup.py fails to find the necessary bits to build some modules, have it
print a slightly more informative message.
........
r57320 | brett.cannon | 2007-08-23 07:53:17 -0700 (Thu, 23 Aug 2007) | 2 lines
Make test_runpy re-entrant.
........
r57324 | georg.brandl | 2007-08-23 10:54:11 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1768121: fix wrong/missing opcode docs.
........
r57326 | georg.brandl | 2007-08-23 10:57:05 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1766421: "return code" vs. "status code".
........
r57328 | georg.brandl | 2007-08-23 11:08:06 -0700 (Thu, 23 Aug 2007) | 2 lines
Second half of #1752175: #ifdef out references to PyImport_DynLoadFiletab if HAVE_DYNAMIC_LOADING is not defined.
........
r57331 | georg.brandl | 2007-08-23 11:11:33 -0700 (Thu, 23 Aug 2007) | 2 lines
Use try-except-finally in contextlib.
........
r57343 | georg.brandl | 2007-08-23 13:35:00 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1697820: document that the old slice protocol is still used by builtin types.
........
r57345 | georg.brandl | 2007-08-23 13:40:01 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1573854: fix docs for sqlite3 cursor rowcount attr.
........
r57347 | georg.brandl | 2007-08-23 13:50:23 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1694833: fix imp.find_module() docs wrt. packages.
........
r57348 | georg.brandl | 2007-08-23 13:53:28 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1594966: fix misleading usage example
........
r57349 | georg.brandl | 2007-08-23 13:55:44 -0700 (Thu, 23 Aug 2007) | 2 lines
Clarify wording a bit.
........
r57351 | georg.brandl | 2007-08-23 14:18:44 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1752332: httplib no longer uses socket.getaddrinfo().
........
r57352 | georg.brandl | 2007-08-23 14:21:36 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1734111: document struct.Struct.size.
........
r57353 | georg.brandl | 2007-08-23 14:27:57 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1688564: document os.path.join's absolute path behavior in the docstring.
........
r57354 | georg.brandl | 2007-08-23 14:36:05 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1625381: clarify match vs search introduction.
........
r57355 | georg.brandl | 2007-08-23 14:42:54 -0700 (Thu, 23 Aug 2007) | 2 lines
Bug #1758696: more info about descriptors.
........
r57357 | georg.brandl | 2007-08-23 14:55:57 -0700 (Thu, 23 Aug 2007) | 2 lines
Patch #1779550: remove redundant code in logging.
........
r57378 | gregory.p.smith | 2007-08-23 22:11:38 -0700 (Thu, 23 Aug 2007) | 2 lines
Fix bug 1725856.
........
r57382 | georg.brandl | 2007-08-23 23:10:01 -0700 (Thu, 23 Aug 2007) | 2 lines
uuid creation is now threadsafe, backport from py3k rev. 57375.
........
r57389 | georg.brandl | 2007-08-24 04:47:37 -0700 (Fri, 24 Aug 2007) | 2 lines
Bug #1765375: fix stripping of unwanted LDFLAGS.
........
r57391 | guido.van.rossum | 2007-08-24 07:53:14 -0700 (Fri, 24 Aug 2007) | 2 lines
Fix silly typo in test name.
........
2007-08-24 13:32:05 -03:00
|
|
|
|
2016-09-03 13:21:29 -03:00
|
|
|
|
|
|
|
.. _half precision format: https://en.wikipedia.org/wiki/Half-precision_floating-point_format
|
|
|
|
|
2022-06-21 15:55:18 -03:00
|
|
|
.. _ieee 754 standard: https://en.wikipedia.org/wiki/IEEE_754-2008_revision
|
2020-09-11 12:20:12 -03:00
|
|
|
|
2023-05-02 03:34:44 -03:00
|
|
|
.. _IETF RFC 1700: https://datatracker.ietf.org/doc/html/rfc1700
|