2 Functions to convert between Python values and C structs.
3 Python strings are used to hold the data representing the C struct
4 and also as format strings to describe the layout of data in the C struct.
6 The optional first format char indicates byte order, size and alignment:
7 @: native order, size & alignment (default)
8 =: native order, std. size & alignment
9 <: little-endian, std. size & alignment
10 >: big-endian, std. size & alignment
13 The remaining chars indicate types of args and must match exactly;
14 these can be preceded by a decimal repeat count:
15 x: pad byte (no data); c:char; b:signed byte; B:unsigned byte;
16 h:short; H:unsigned short; i:int; I:unsigned int;
17 l:long; L:unsigned long; f:float; d:double.
18 Special cases (preceding decimal count indicates length):
19 s:string (array of char); p: pascal string (with count byte).
20 Special case (only available in native format):
21 P:an integer type that is wide enough to hold a pointer.
22 Special case (not in native mode unless 'long long' in platform C):
23 q:long long; Q:unsigned long long
24 Whitespace between formats is ignored.
26 The variable struct.error is an exception raised on errors.
30 from _struct
import Struct
, error
36 # Internal: compile struct pattern
37 if len(_cache
) >= _MAXCACHE
:
45 Return size of C struct described by format string fmt.
46 See struct.__doc__ for more on format strings.
56 Return string containing values v1, v2, ... packed according to fmt.
57 See struct.__doc__ for more on format strings.
65 def pack_into(fmt
, buf
, offset
, *args
):
67 Pack the values v1, v2, ... according to fmt, write
68 the packed bytes into the writable buffer buf starting at offset.
69 See struct.__doc__ for more on format strings.
75 return o
.pack_into(buf
, offset
, *args
)
79 Unpack the string, containing packed C structure data, according
80 to fmt. Requires len(string)==calcsize(fmt).
81 See struct.__doc__ for more on format strings.
89 def unpack_from(fmt
, buf
, offset
=0):
91 Unpack the buffer, containing packed C structure data, according to
92 fmt starting at offset. Requires len(buffer[offset:]) >= calcsize(fmt).
93 See struct.__doc__ for more on format strings.
99 return o
.unpack_from(buf
, offset
)