# Python Struct Module

The `struct` module performs conversions between Python values and C structs represented as Python `bytes` objects. This can be used in handling binary data stored in files or from network connections, among other sources.

## Importing the Module

```python
import struct
```

## Packing Data

`struct.pack()` returns a bytes object containing the values v1, v2, ... packed according to the format string `fmt`.

```python
import struct

# Pack an integer, two bytes, and a float
packed_data = struct.pack('I 2s f', 1024, b'AB', 3.14)
print(packed_data)
```

## Unpacking Data

`struct.unpack()` unpacks from the buffer (presumably packed by `pack(fmt, ...)`) according to the format string `fmt`. The result is a tuple even if it contains exactly one item.

```python
import struct

packed_data = b'\x00\x04\x00\x00AB\xc3\xf5H@'
unpacked_data = struct.unpack('I 2s f', packed_data)
print(unpacked_data)
# Output: (1024, b'AB', 3.140000104904175)
```

## Format Strings

Format strings are the mechanism used to specify the expected layout when packing and unpacking data.

### Byte Order, Size, and Alignment

The first character of the format string can be used to indicate the byte order, size, and alignment of the packed data.

*   `@`: Native (default)
*   `=`: Native
*   `<`: Little-endian
*   `>`: Big-endian
*   `!`: Network (= big-endian)

### Format Characters

*   `x`: pad byte
*   `c`: char (bytes of length 1)
*   `b`: signed char (integer)
*   `B`: unsigned char (integer)
*   `h`: short (integer)
*   `H`: unsigned short (integer)
*   `i`: int (integer)
*   `I`: unsigned int (integer)
*   `f`: float
*   `d`: double
*   `s`: char[] (bytes)

## Calculating Size

`struct.calcsize()` returns the size of the struct (and hence of the bytes object produced by `pack(fmt, ...)`) corresponding to the format string `fmt`.

```python
import struct

size = struct.calcsize('I 2s f')
print(size)
```

[[programming/python/python]]