blob: 453fa203ba2f00b63d48f7a9201c9e3555250e94 [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{struct} ---
2 Interpret strings as packed binary data.}
Fred Drakeb91e9341998-07-23 17:59:49 +00003\declaremodule{builtin}{struct}
4
5\modulesynopsis{Interpret strings as packed binary data.}
6
Fred Drakeabdea221998-03-16 05:22:08 +00007\indexii{C@\C{}}{structures}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +00008
Fred Drake50b804d1998-11-30 22:14:58 +00009This module performs conversions between Python values and \C{}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000010structs represented as Python strings. It uses \dfn{format strings}
Fred Drake50b804d1998-11-30 22:14:58 +000011(explained below) as compact descriptions of the lay-out of the \C{}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000012structs and the intended conversion to/from Python values.
13
14The module defines the following exception and functions:
15
Fred Drake7ddd0431998-03-08 07:44:13 +000016
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000017\begin{excdesc}{error}
18 Exception raised on various occasions; argument is a string
19 describing what is wrong.
20\end{excdesc}
21
Fred Drake50b804d1998-11-30 22:14:58 +000022\begin{funcdesc}{pack}{fmt, v1, v2, \textrm{\ldots}}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000023 Return a string containing the values
Fred Drake50b804d1998-11-30 22:14:58 +000024 \code{\var{v1}, \var{v2}, \textrm{\ldots}} packed according to the given
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000025 format. The arguments must match the values required by the format
26 exactly.
27\end{funcdesc}
28
Fred Drakecce10901998-03-17 06:33:25 +000029\begin{funcdesc}{unpack}{fmt, string}
Fred Drake50b804d1998-11-30 22:14:58 +000030 Unpack the string (presumably packed by \code{pack(\var{fmt},
31 \textrm{\ldots})}) according to the given format. The result is a
32 tuple even if it contains exactly one item. The string must contain
33 exactly the amount of data required by the format (i.e.
34 \code{len(\var{string})} must equal \code{calcsize(\var{fmt})}).
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000035\end{funcdesc}
36
37\begin{funcdesc}{calcsize}{fmt}
38 Return the size of the struct (and hence of the string)
39 corresponding to the given format.
40\end{funcdesc}
41
Fred Drake50b804d1998-11-30 22:14:58 +000042Format characters have the following meaning; the conversion between
43\C{} and Python values should be obvious given their types:
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000044
Fred Drakeee601911998-04-11 20:53:03 +000045\begin{tableiii}{c|l|l}{samp}{Format}{C Type}{Python}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000046 \lineiii{x}{pad byte}{no value}
Fred Drake50b804d1998-11-30 22:14:58 +000047 \lineiii{c}{\ctype{char}}{string of length 1}
48 \lineiii{b}{\ctype{signed char}}{integer}
49 \lineiii{B}{\ctype{unsigned char}}{integer}
50 \lineiii{h}{\ctype{short}}{integer}
51 \lineiii{H}{\ctype{unsigned short}}{integer}
52 \lineiii{i}{\ctype{int}}{integer}
53 \lineiii{I}{\ctype{unsigned int}}{integer}
54 \lineiii{l}{\ctype{long}}{integer}
55 \lineiii{L}{\ctype{unsigned long}}{integer}
56 \lineiii{f}{\ctype{float}}{float}
57 \lineiii{d}{\ctype{double}}{float}
58 \lineiii{s}{\ctype{char[]}}{string}
59 \lineiii{p}{\ctype{char[]}}{string}
60 \lineiii{P}{\ctype{void *}}{integer}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000061\end{tableiii}
62
Fred Drake50b804d1998-11-30 22:14:58 +000063A format character may be preceded by an integral repeat count;
64e.g.\ the format string \code{'4h'} means exactly the same as
65\code{'hhhh'}.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000066
Guido van Rossume20aef51997-08-26 20:39:54 +000067Whitespace characters between formats are ignored; a count and its
68format must not contain whitespace though.
69
Fred Drakecf0fb8b1998-07-23 21:18:25 +000070For the \character{s} format character, the count is interpreted as the
Guido van Rossum12543461996-12-31 02:22:14 +000071size of the string, not a repeat count like for the other format
72characters; e.g. \code{'10s'} means a single 10-byte string, while
73\code{'10c'} means 10 characters. For packing, the string is
74truncated or padded with null bytes as appropriate to make it fit.
75For unpacking, the resulting string always has exactly the specified
76number of bytes. As a special case, \code{'0s'} means a single, empty
77string (while \code{'0c'} means 0 characters).
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000078
Fred Drakecf0fb8b1998-07-23 21:18:25 +000079The \character{p} format character can be used to encode a Pascal
80string. The first byte is the length of the stored string, with the
81bytes of the string following. If count is given, it is used as the
82total number of bytes used, including the length byte. If the string
83passed in to \function{pack()} is too long, the stored representation
84is truncated. If the string is too short, padding is used to ensure
85that exactly enough bytes are used to satisfy the count.
86
87For the \character{I} and \character{L} format characters, the return
Guido van Rossum65307171997-01-03 19:21:53 +000088value is a Python long integer.
Guido van Rossum12543461996-12-31 02:22:14 +000089
Guido van Rossum6ac06b31998-09-21 14:44:34 +000090For the \character{P} format character, the return value is a Python
91integer or long integer, depending on the size needed to hold a
Fred Drake50b804d1998-11-30 22:14:58 +000092pointer when it has been cast to an integer type. A \NULL{} pointer will
93always be returned as the Python integer \code{0}. When packing pointer-sized
Guido van Rossum6ac06b31998-09-21 14:44:34 +000094values, Python integer or long integer objects may be used. For
95example, the Alpha and Merced processors use 64-bit pointer values,
96meaning a Python long integer will be used to hold the pointer; other
97platforms use 32-bit pointers and will use a Python integer.
98
Fred Drake50b804d1998-11-30 22:14:58 +000099By default, \C{} numbers are represented in the machine's native format
Guido van Rossum12543461996-12-31 02:22:14 +0000100and byte order, and properly aligned by skipping pad bytes if
Fred Drake50b804d1998-11-30 22:14:58 +0000101necessary (according to the rules used by the \C{} compiler).
Guido van Rossum12543461996-12-31 02:22:14 +0000102
103Alternatively, the first character of the format string can be used to
104indicate the byte order, size and alignment of the packed data,
105according to the following table:
106
Fred Drakeee601911998-04-11 20:53:03 +0000107\begin{tableiii}{c|l|l}{samp}{Character}{Byte order}{Size and alignment}
Guido van Rossum12543461996-12-31 02:22:14 +0000108 \lineiii{@}{native}{native}
109 \lineiii{=}{native}{standard}
110 \lineiii{<}{little-endian}{standard}
111 \lineiii{>}{big-endian}{standard}
112 \lineiii{!}{network (= big-endian)}{standard}
113\end{tableiii}
114
Fred Drakecf0fb8b1998-07-23 21:18:25 +0000115If the first character is not one of these, \character{@} is assumed.
Guido van Rossum12543461996-12-31 02:22:14 +0000116
117Native byte order is big-endian or little-endian, depending on the
118host system (e.g. Motorola and Sun are big-endian; Intel and DEC are
119little-endian).
120
Fred Drake50b804d1998-11-30 22:14:58 +0000121Native size and alignment are determined using the \C{} compiler's
122\keyword{sizeof} expression. This is always combined with native byte
123order.
Guido van Rossum12543461996-12-31 02:22:14 +0000124
125Standard size and alignment are as follows: no alignment is required
Fred Drake50b804d1998-11-30 22:14:58 +0000126for any type (so you have to use pad bytes); \ctype{short} is 2 bytes;
127\ctype{int} and \ctype{long} are 4 bytes. \ctype{float} and
128\ctype{double} are 32-bit and 64-bit IEEE floating point numbers,
129respectively.
Guido van Rossum12543461996-12-31 02:22:14 +0000130
Fred Drake50b804d1998-11-30 22:14:58 +0000131Note the difference between \character{@} and \character{=}: both use
132native byte order, but the size and alignment of the latter is
133standardized.
Guido van Rossum12543461996-12-31 02:22:14 +0000134
Fred Drakecf0fb8b1998-07-23 21:18:25 +0000135The form \character{!} is available for those poor souls who claim they
Guido van Rossum12543461996-12-31 02:22:14 +0000136can't remember whether network byte order is big-endian or
137little-endian.
138
139There is no way to indicate non-native byte order (i.e. force
Fred Drakecf0fb8b1998-07-23 21:18:25 +0000140byte-swapping); use the appropriate choice of \character{<} or
141\character{>}.
Guido van Rossum12543461996-12-31 02:22:14 +0000142
Guido van Rossum6ac06b31998-09-21 14:44:34 +0000143The \character{P} format character is only available for the native
144byte ordering (selected as the default or with the \character{@} byte
145order character). The byte order character \character{=} chooses to
146use little- or big-endian ordering based on the host system. The
147struct module does not interpret this as native ordering, so the
148\character{P} format is not available.
149
Guido van Rossum12543461996-12-31 02:22:14 +0000150Examples (all using native byte order, size and alignment, on a
151big-endian machine):
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000152
Fred Drake19479911998-02-13 06:58:54 +0000153\begin{verbatim}
Guido van Rossumdbadd551997-01-03 04:20:09 +0000154>>> from struct import *
155>>> pack('hhl', 1, 2, 3)
156'\000\001\000\002\000\000\000\003'
157>>> unpack('hhl', '\000\001\000\002\000\000\000\003')
158(1, 2, 3)
159>>> calcsize('hhl')
1608
161>>>
Fred Drake19479911998-02-13 06:58:54 +0000162\end{verbatim}
Fred Drake50b804d1998-11-30 22:14:58 +0000163
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000164Hint: to align the end of a structure to the alignment requirement of
165a particular type, end the format with the code for that type with a
Guido van Rossum6c4f0031995-03-07 10:14:09 +0000166repeat count of zero, e.g.\ the format \code{'llh0l'} specifies two
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000167pad bytes at the end, assuming longs are aligned on 4-byte boundaries.
Fred Drake7ddd0431998-03-08 07:44:13 +0000168This only works when native size and alignment are in effect;
169standard size and alignment does not enforce any alignment.
170
171\begin{seealso}
172\seemodule{array}{packed binary storage of homogeneous data}
173\end{seealso}