macholib.ptypes
— Packable types¶
The module macholib.ptypes
defines types that can be serialized into
byte arrays, both for basic types and structured types (C struct
values).
Utility functions¶
- macholib.ptypes.sizeof(value)¶
Returns the size in bytes of an object when packed, raises
ValueError
for inappropriate values.
- macholib.ptypes.pypackable(name, pytype, format)¶
Returns a packable type that is a subclass of the Python type pytype. The value is converted to and from the packed format using the struct format.
Packable types¶
- class macholib.ptypes.BasePackable¶
All packable types are a subclass of
BasePackable
, which defines the basic interface but is itself an abstract base class.- _endian_¶
The byteorder of a packed value. This will be
"<"` for little endian values and ``">"
for big-endian ones.Note
the endianness option is a public value to be able to support both big- and little-endian file formats.
The name suggests that this attribute is private, this is partically for historical reasons and partially to avoid conflicts with field names in C structs.
- from_mmap(mmap, ptr, \**kw)¶
This class method constructs the value from a subview of a
mmap.mmap
object. It uses bytes starting at offset ptr and reads just enough bytes to read the entire object.
- from_fileobj(fp, \**kw)¶
This class method constructs the value by reading just enough bytes from a file-like object.
Note
The file must be opened in binary mode, that is read calls should return byte-strings and not unicode-strings.
- from_str(value, \**kw)¶
This class method construct the value by using the struct module to parse the given bytes.
Note
contrary to what the name suggests the argument to this method is a byte-string, not a unicode-string.
- from_tuple(fp, \**kw)¶
This class method constructs the object from a tuple with all fields.
- to_str()¶
Returns a byte representation of the value.
Note
there is no default implementation for this method
- to_fileobj(fp)¶
Write a byte representation of the value to the given file-like object. The file should be opened in binary mode.
- to_mmap(mmap, ptr)¶
Write the byte representation of the value to a
mmap.mmap
object, starting at offset ptr.
- class macholib.ptypes.Structure(...)¶
- _fields_¶
This class attribute is a list that contains the fields of the structure in the right order. Every item of this list is a tuple with 2 arguments: the first element is the name of the field, and the second the packable type for the field.
Every subclass of
Structure
must define _fields_ to be usefull, and the value of _fields_ should not be changed after class construction.
Basic packables¶
Other than the core functionality this module defines a number of
pypackable()
types that correspond to useful basic C types.
- class macholib.ptypes.p_char([value])¶
A byte string of length 1
- class macholib.ptypes.p_int8¶
An 8-bit signed integer
- class macholib.ptypes.p_uint8¶
An 8-bit unsigned integer
- class macholib.ptypes.p_int16¶
An 16-bit signed integer
- class macholib.ptypes.p_uint16¶
An 16-bit unsigned integer
- class macholib.ptypes.p_int32¶
An 32-bit signed integer
- class macholib.ptypes.p_uint32¶
An 32-bit unsigned integer
- class macholib.ptypes.p_int64¶
An 64-bit signed integer
- class macholib.ptypes.p_uint64¶
An 64-bit unsigned integer
- class macholib.ptypes.p_float¶
An floating point value of type
float
- class macholib.ptypes.p_double¶
An floating point value of type
double
Note
the module exports a number of other types with
names starting with p_
, such as p_int
. Those types
are deprecated and should not be used.