Core API: Bytes and bits¶
-
construct.
Bytes
(length)¶ A field consisting of a specified number of bytes. Builds from a b-string, or an integer (although deprecated and BytesInteger should be used).
See also
Analog
BytesInteger()
that parses and builds from integers.- Parameters
length – an int or a function that takes context and returns int
Example:
>>> Bytes(4).parse(b"beef") b'beef' >>> Bytes(4).build(_) b'beef' >>> Bytes(4).build(255) b'\x00\x00\x00\xff' >>> Bytes(4).sizeof() 4
-
construct.
GreedyBytes
()¶ A byte field, that parses the stream to the end and builds into the stream as-is.
This is an analog to Bytes(infinity), pun intended.
See also
Analog
GreedyString()
that parses and builds from strings using an encoding.Example:
>>> GreedyBytes.parse(b"helloworld") b'helloworld' >>> GreedyBytes.build(b"asis") b'asis'
-
construct.
Bitwise
(subcon)¶ Converts the stream from bytes to bits, and passes the bitstream to underlying subcon.
See also
Analog
Bytewise()
that transforms subset of bits back to bytes.Warning
Do not use pointers inside.
- Parameters
subcon – any field that works with bits like: BitStruct BitsNumber Bit Nibble Octet
Example:
>>> Bitwise(Octet).parse(b"\xff") 255 >>> Bitwise(Octet).build(1) b'\x01' >>> Bitwise(Octet).sizeof() 1
-
construct.
BytesInteger
(length, signed=False, swapped=False, bytesize=1)¶ A byte field, that parses into and builds from integers as opposed to b-strings. This is similar to Int* fields but can be much longer than 4 or 8 bytes.
See also
Analog
BitsInteger()
that operatoes on bits.- Parameters
length – number of bytes in the field, or a function that takes context and returns int
signed – whether the value is signed (two’s complement), default is False (unsigned)
swapped – whether to swap byte order (little endian), default is False (big endian)
bytesize – size of byte as used for byte swapping (if swapped), default is 1
Example:
>>> BytesInteger(4).parse(b"abcd") 1633837924 >>> BytesInteger(4).build(1) b'\x00\x00\x00\x01' >>> BytesInteger(4).sizeof() 4
-
construct.
BitsInteger
(length, signed=False, swapped=False, bytesize=8)¶ A byte field, that parses into and builds from integers as opposed to b-strings. This is similar to Bit/Nibble/Octet fields but can be much longer than 1/4/8 bits. This must be encosed in Bitwise.
- Parameters
length – number of bits in the field, or a function that takes context and returns int
signed – whether the value is signed (two’s complement), default is False (unsigned)
swapped – whether to swap byte order (little endian), default is False (big endian)
bytesize – size of byte as used for byte swapping (if swapped), default is 8
Example:
>>> Bitwise(BitsInteger(8)).parse(b"\x10") 16 >>> Bitwise(BitsInteger(8)).build(255) b'\xff' >>> Bitwise(BitsInteger(8)).sizeof() 1