Python struct module is capable of performing the conversions between the Python values and C structs, which are represented as Python Strings.
There are five important functions in struct module - pack()
, unpack()
, calcsize()
, pack_into()
and unpack_from()
. In all these functions, we have to provide the format of the data to be converted into binary. Some of the popular format characters are:
?: boolean
h: short
l: long
i: int
f: float
q: long long int
You can get the complete list of format characters here. Let’s start looking into struct module functions one by one.
This function packs a list of values into a String representation of the specified type. The arguments must match the values required by the format exactly. Let’s quickly look at struct pack() example:
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
var = struct.pack('iii', 10, 20, 30)
print(var)
When we run this script, we get the following representation: Note that ‘b’ in the Output stands for binary.
This function unpacks the packed value into its original representation with the specified format. This function always returns a tuple, even if there is only one element. Let’s quickly look at struct unpack() function example:
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print(struct.unpack('hhl', var))
When we run this script, we get back our original representation: Clearly, we must tell the Python interpreter the format we need to unpack the values into.
This function calculates and returns the size of the String representation of struct with a given format. Size is calculated in terms of bytes. Let’s quickly look at an example code snippet:
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print("Size of String representation is {}.".format(struct.calcsize('hhl')))
When we run this script, we get the following representation:
These functions allow us to pack the values into string buffer and unpack from a string buffer. These functions are introduced in version 2.5.
import struct
# ctypes is imported to create a string buffer
import ctypes
# As shown in previous example
size = struct.calcsize('hhl')
print(size)
# Buffer 'buff' is created from ctypes
buff = ctypes.create_string_buffer(siz)
# struct.pack_into() packs data into buff and it doesn't return any value
# struct.unpack_from() unpacks data from buff, returns a tuple of values
print(struct.pack_into('hhl', buff, 0, 5, 10, 15))
print(struct.unpack_from('hhl', buff, 0))
When we run this script, we get the following representation: That’s all for a short introduction of python
struct
module.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
I agree, the way the struct var prints is ridiculous. How did it get past the checking process?
- Pete
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Full documentation for every DigitalOcean product.
The Wave has everything you need to know about building a business, from raising funding to marketing your product.
Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.
New accounts only. By submitting your email you agree to our Privacy Policy
Scale up as you grow — whether you're running one virtual machine or ten thousand.
Sign up and get $200 in credit for your first 60 days with DigitalOcean.*
*This promotional offer applies to new accounts only.