Hướng dẫn python print struct
Source code: Lib/struct.py This module performs conversions between Python values and C structs represented as Python Note By default, the result of
packing a given C struct includes pad bytes in order to maintain proper alignment for the C types involved; similarly, alignment is taken into account when unpacking. This behavior is chosen so that the bytes of a packed struct correspond exactly to the layout in memory of the corresponding C struct. To handle platform-independent data formats or omit implicit pad bytes, use Several The module defines the following exception and functions: Exception raised on various occasions; argument is a string describing what is wrong. Return a bytes object containing the values v1, v2, … packed according to the format string format. The arguments must match the values required by the format exactly. Pack the values v1, v2, … according to the format string format and write the packed bytes into the writable buffer buffer starting at position offset. Note that offset is a required argument. Unpack from the buffer buffer (presumably packed by Unpack from buffer starting at position offset, according to the format string format. The result is a tuple even if it contains exactly one item. The buffer’s size in bytes, starting at
position offset, must be at least the size required by the format, as reflected by Iteratively unpack from the buffer buffer according to the format string format. This function returns an iterator which will read equally sized chunks from the buffer until all its contents have been consumed. The buffer’s size in bytes must be a multiple of the size required by the format, as reflected by
Each iteration yields a tuple as specified by the format string. New in version 3.4. Return the size of the struct (and hence of the bytes object produced by Format strings are the mechanism used to specify the expected layout
when packing and unpacking data. They are built up from Format Characters, which specify the type of data being packed/unpacked. In addition, there are special characters for controlling the Byte Order, Size, and Alignment. By default, C types are represented in the machine’s native format and byte order, and properly aligned by skipping pad bytes if necessary
(according to the rules used by the C compiler). Alternatively, the first character of the format string can be used to indicate the byte order, size and alignment of the packed data, according to the following table: Character Byte order Size Alignment native native native native standard none little-endian standard none big-endian standard none network (= big-endian) standard none If the first character is not one of these, Native byte order is big-endian or little-endian, depending on the host system. For example, Intel x86 and AMD64 (x86-64) are little-endian; IBM z and most legacy architectures are big-endian; and ARM, RISC-V and IBM Power feature switchable endianness (bi-endian, though the former two are nearly always little-endian in practice). Use Native size and
alignment are determined using the C compiler’s Standard size depends only on the format character; see the table in the Format Characters section. Note the difference between The form There
is no way to indicate non-native byte order (force byte-swapping); use the appropriate choice of Notes:
Format Characters¶Format characters have the following meaning; the conversion between C and Python values should be obvious given their types. The ‘Standard size’ column refers to the size of the packed value in bytes when using standard size; that is, when the format string starts with one of
Changed in version 3.3: Added support for the Changed in version 3.6: Added support for the Notes:
A format character may be preceded by an integral repeat count. For example, the format string Whitespace characters between formats are ignored; a count and its format must not contain whitespace though. For the When packing a value Changed in version 3.1: Previously, some of the integer formats wrapped out-of-range values and raised The For the Examples¶Note All examples assume a native byte order, size, and alignment with a big-endian machine. A basic example of packing/unpacking three integers: >>> from struct import * >>> pack('hhl', 1, 2, 3) b'\x00\x01\x00\x02\x00\x00\x00\x03' >>> unpack('hhl', b'\x00\x01\x00\x02\x00\x00\x00\x03') (1, 2, 3) >>> calcsize('hhl') 8 Unpacked fields can be named by assigning them to variables or by wrapping the result in a named tuple: >>> record = b'raymond \x32\x12\x08\x01\x08' >>> name, serialnum, school, gradelevel = unpack('<10sHHb', record) >>> from collections import namedtuple >>> Student = namedtuple('Student', 'name serialnum school gradelevel') >>> Student._make(unpack('<10sHHb', record)) Student(name=b'raymond ', serialnum=4658, school=264, gradelevel=8) The ordering of format characters may have an impact on size since the padding needed to satisfy alignment requirements is different: >>> pack('ci', b'*', 0x12131415) b'*\x00\x00\x00\x12\x13\x14\x15' >>> pack('ic', 0x12131415, b'*') b'\x12\x13\x14\x15*' >>> calcsize('ci') 8 >>> calcsize('ic') 5 The following format >>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00' This only works when native size and alignment are in effect; standard size and alignment does not enforce any alignment. See also Modulearray Packed binary storage of homogeneous data. Modulexdrlib Packing and unpacking of XDR data. Classes¶The struct. Struct (format)¶Return
a new Struct object which writes and reads binary data according to the format string format. Creating a Struct object once and calling its methods is more efficient than calling the Note The compiled versions of the most recent format strings passed to Compiled Struct objects support the following methods and attributes: pack (v1, v2, ...)¶Identical to the pack_into (buffer, offset, v1, v2, ...)¶Identical to the unpack (buffer)¶Identical to the unpack_from (buffer, offset=0)¶Identical to the iter_unpack (buffer)¶Identical to the New in version 3.4. format ¶The format string used to construct this Struct object. Changed in version 3.7: The format string type is now size ¶The calculated size of the struct (and hence of the bytes object produced by the |