What is struct in python?
struct
is the python module which translates binary string to python types and vice versa. if you have any binary string which comes from network stream or anywhere can be directly translated to python types.
Where it can be used?
Network streaming applications, where it supposed to receive lots of streaming binary content, it can be processed in python with help of this module.
What are the rules?
- It has two familiar methods.
pack
,unpack
- It takes data format as one of the input field along with the target data.
- Some notables
struct.pack(format_string, data)
struct.unpack(format_string, data)
format_string
is used to parse the incoming data into a given format. There are various data formats are possible based on the cpu architecture of the machine(endian-ness
) endian.
for example, s
represents single char, f
– floating point number, I
– unsigned integer. There are the codes are used in format identifier. formats
Example?
In [88]: py_data = (1, 'navaneethan', 3.14)
In [89]: py_data
Out[89]: (1, 'navaneethan', 3.14)
In [90]: import struct
In [91]: struct.pack('I 11s f', *py_data)
Out[91]: '\x01\x00\x00\x00navaneethan\x00\xc3\xf5H@'
In [92]: hex_rep = struct.pack('I 11s f', *py_data)
In [93]: import binascii
In [94]: binascii.hexlify(hex_rep)
Out[94]: '010000006e6176616e65657468616e00c3f54840'
In [95]: bin_rep = binascii.hexlify(hex_rep)
In [96]: binascii.unhexlify(bin_rep)
Out[96]: '\x01\x00\x00\x00navaneethan\x00\xc3\xf5H@'
In [97]: struct.unpack('I 11s f', hex_rep)
Out[97]: (1, 'navaneethan', 3.140000104904175)
In [103]: struct.unpack('@I 11s f', hex_rep)
Out[103]: (1, 'navaneethan', 3.140000104904175)
# `@` represents native
In [102]: struct.unpack('<I 11s f', hex_rep)
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-102-94050abdb5f6> in <module>()
----> 1 struct.unpack('<I 11s f', hex_rep)
# `<` represents little-endian format, so it failed
format_string in the above example, I 11s f - ( 1 Unsigned Integer, 11 char string, 1 float value)
Still, hungry?
https://docs.python.org/3/library/struct.html