2021-08-12 04:59:29 +01:00
|
|
|
:mod:`struct` -- pack and unpack primitive data types
|
|
|
|
=====================================================
|
2014-11-02 23:37:02 +00:00
|
|
|
|
2021-08-12 04:59:29 +01:00
|
|
|
.. module:: struct
|
2014-11-02 23:37:02 +00:00
|
|
|
:synopsis: pack and unpack primitive data types
|
|
|
|
|
2017-07-02 13:37:31 +01:00
|
|
|
|see_cpython_module| :mod:`python:struct`.
|
2014-11-02 23:37:02 +00:00
|
|
|
|
2022-12-01 15:30:03 +00:00
|
|
|
The following byte orders are supported:
|
2016-05-14 18:48:43 +01:00
|
|
|
|
2022-12-01 15:30:03 +00:00
|
|
|
+-----------+------------------------+----------+-----------+
|
|
|
|
| Character | Byte order | Size | Alignment |
|
|
|
|
+===========+========================+==========+===========+
|
|
|
|
| @ | native | native | native |
|
|
|
|
+-----------+------------------------+----------+-----------+
|
|
|
|
| < | little-endian | standard | none |
|
|
|
|
+-----------+------------------------+----------+-----------+
|
|
|
|
| > | big-endian | standard | none |
|
|
|
|
+-----------+------------------------+----------+-----------+
|
|
|
|
| ! | network (= big-endian) | standard | none |
|
|
|
|
+-----------+------------------------+----------+-----------+
|
|
|
|
|
|
|
|
The following data types are supported:
|
|
|
|
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| Format | C Type | Python type | Standard size |
|
|
|
|
+========+====================+===================+===============+
|
|
|
|
| b | signed char | integer | 1 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| B | unsigned char | integer | 1 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| h | short | integer | 2 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| H | unsigned short | integer | 2 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| i | int | integer (`1<fn>`) | 4 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| I | unsigned int | integer (`1<fn>`) | 4 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| l | long | integer (`1<fn>`) | 4 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| L | unsigned long | integer (`1<fn>`) | 4 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| q | long long | integer (`1<fn>`) | 8 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| Q | unsigned long long | integer (`1<fn>`) | 8 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| f | float | float (`2<fn>`) | 4 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| d | double | float (`2<fn>`) | 8 |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| s | char[] | bytes | |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
| P | void * | integer | |
|
|
|
|
+--------+--------------------+-------------------+---------------+
|
|
|
|
|
|
|
|
.. _fn:
|
|
|
|
|
|
|
|
(1) Requires long support when used with values larger than 30 bits.
|
|
|
|
(2) Requires floating point support.
|
2016-05-14 18:48:43 +01:00
|
|
|
|
2019-08-05 12:09:14 +01:00
|
|
|
.. admonition:: Difference to CPython
|
|
|
|
:class: attention
|
|
|
|
|
|
|
|
Whitespace is not supported in format strings.
|
|
|
|
|
2014-11-02 23:37:02 +00:00
|
|
|
Functions
|
|
|
|
---------
|
|
|
|
|
|
|
|
.. function:: calcsize(fmt)
|
|
|
|
|
2017-06-29 22:34:52 +01:00
|
|
|
Return the number of bytes needed to store the given *fmt*.
|
2014-11-02 23:37:02 +00:00
|
|
|
|
|
|
|
.. function:: pack(fmt, v1, v2, ...)
|
|
|
|
|
2017-06-29 22:34:52 +01:00
|
|
|
Pack the values *v1*, *v2*, ... according to the format string *fmt*.
|
2014-11-02 23:37:02 +00:00
|
|
|
The return value is a bytes object encoding the values.
|
|
|
|
|
2016-05-01 11:17:07 +01:00
|
|
|
.. function:: pack_into(fmt, buffer, offset, v1, v2, ...)
|
|
|
|
|
2017-06-29 22:34:52 +01:00
|
|
|
Pack the values *v1*, *v2*, ... according to the format string *fmt*
|
|
|
|
into a *buffer* starting at *offset*. *offset* may be negative to count
|
|
|
|
from the end of *buffer*.
|
2016-05-01 11:17:07 +01:00
|
|
|
|
2014-11-02 23:37:02 +00:00
|
|
|
.. function:: unpack(fmt, data)
|
|
|
|
|
2017-06-29 22:34:52 +01:00
|
|
|
Unpack from the *data* according to the format string *fmt*.
|
2014-11-02 23:37:02 +00:00
|
|
|
The return value is a tuple of the unpacked values.
|
2016-05-01 11:17:07 +01:00
|
|
|
|
2020-01-11 06:44:17 +00:00
|
|
|
.. function:: unpack_from(fmt, data, offset=0, /)
|
2016-05-01 11:17:07 +01:00
|
|
|
|
2017-06-29 22:34:52 +01:00
|
|
|
Unpack from the *data* starting at *offset* according to the format string
|
2022-12-01 14:52:33 +00:00
|
|
|
*fmt*. *offset* may be negative to count from the end of *data*. The return
|
2016-05-01 11:17:07 +01:00
|
|
|
value is a tuple of the unpacked values.
|