ConstBitStream Class¶
- class ConstBitStream([auto, length, offset, pos, **kwargs])¶
The
Bitsclass is the base class forConstBitStreamand so all of its methods are also available forConstBitStreamobjects. The initialiser is the same as forBitsexcept that an initial bit positionposcan be given (defaults to 0).A
ConstBitStreamis aBitswith added methods and properties that allow it to be parsed as a stream of bits.
Methods¶
bytealign¶
peek¶
- ConstBitStream.peek(fmt)¶
Reads from the current bit position
posin the bitstring according to the fmt string or integer and returns the result.The bit position is unchanged.
For information on the format string see the entry for the
readmethod.>>> s = ConstBitStream('0x123456') >>> s.peek(16) ConstBitStream('0x1234') >>> s.peek('hex8') '12'
peeklist¶
- ConstBitStream.peeklist(fmt, **kwargs)¶
Reads from current bit position
posin the bitstring according to the fmt string or iterable and returns a list of results.A dictionary or keyword arguments can also be provided. These will replace length identifiers in the format string. The position is not advanced to after the read items.
read¶
- ConstBitStream.read(fmt)¶
Reads from current bit position
posin the bitstring according the format string and returns a single result. If not enough bits are available then aReadErroris raised.fmt is either a token string that describes how to interpret the next bits in the bitstring or an integer. If it’s an integer then that number of bits will be read, and returned as a new bitstring. Otherwise the tokens are:
int:n
nbits as a signed integer.
uint:n
nbits as an unsigned integer.
intbe:n
nbits as a byte-wise big-endian signed integer.
uintbe:n
nbits as a byte-wise big-endian unsigned integer.
intle:n
nbits as a byte-wise little-endian signed integer.
uintle:n
nbits as a byte-wise little-endian unsigned integer.
intne:n
nbits as a byte-wise native-endian signed integer.
uintne:n
nbits as a byte-wise native-endian unsigned integer.
float:n
nbits as a big-endian floating point number (same asfloatbe).
floatbe:n
nbits as a big-endian floating point number (same asfloat).
floatle:n
nbits as a little-endian floating point number.
floatne:n
nbits as a native-endian floating point number.
bfloat[:16]16 bits as a big-endian bfloat floating point number (same as
bfloatbe).
bfloatbe[:16]16 bits as a big-endian bfloat floating point number (same as
bfloat).
bfloatle[:16]16 bits as a little-endian floating point number.
bfloatne[:16]16 bits as a native-endian floating point number.
hex:n
nbits as a hexadecimal string.
oct:n
nbits as an octal string.
bin:n
nbits as a binary string.
bits:n
nbits as a new bitstring.
bytes:n
nbytes as abytesobject.
uenext bits as an unsigned exponential-Golomb code.
senext bits as a signed exponential-Golomb code.
uienext bits as an interleaved unsigned exponential-Golomb code.
sienext bits as an interleaved signed exponential-Golomb code.
bool[:1]next bit as a boolean (True or False).
pad:nnext
nbits will be ignored (padding).The
:before the length is optional as of bitstring version 4, and is mostly omitted in the documentation, except where it improves readability.For example:
>>> s = ConstBitStream('0x23ef55302') >>> s.read('hex12') '23e' >>> s.read('bin4') '1111' >>> s.read('uint5') 10 >>> s.read('bits4') ConstBitStream('0xa')The
readmethod is useful for reading exponential-Golomb codes.>>> s = ConstBitStream('se=-9, ue=4') >>> s.read('se') -9 >>> s.read('ue') 4The
padtoken is not very useful when used inreadas it just skips a number of bits and returnsNone. However when used withinreadlistorunpackit allows unimportant part of the bitstring to be simply ignored.
readlist¶
- ConstBitStream.readlist(fmt, **kwargs)¶
Reads from current bit position
posin the bitstring according to the fmt string or iterable and returns a list of results. If not enough bits are available then aReadErroris raised.A dictionary or keyword arguments can also be provided. These will replace length identifiers in the format string. The position is advanced to after the read items.
See the entry for
readfor information on the format strings.For multiple items you can separate using commas or given multiple parameters:
>>> s = ConstBitStream('0x43fe01ff21') >>> s.readlist('hex8, uint6') ['43', 63] >>> s.readlist(['bin3', 'intle16']) ['100', -509] >>> s.pos = 0 >>> s.readlist('hex:b, uint:d', b=8, d=6) ['43', 63]
readto¶
- ConstBitStream.readto(bs, bytealigned)¶
Reads up to and including the next occurrence of the bitstring bs and returns the results. If bytealigned is True it will look for the bitstring starting only at whole-byte positions.
Raises a
ReadErrorif bs is not found, andValueErrorif bs is empty.>>> s = ConstBitStream('0x47000102034704050647') >>> s.readto('0x47', bytealigned=True) BitStream('0x47') >>> s.readto('0x47', bytealigned=True) BitStream('0x0001020347') >>> s.readto('0x47', bytealigned=True) BitStream('0x04050647')
Properties¶
bytepos¶
- ConstBitStream.bytepos¶
Property for setting and getting the current byte position in the bitstring.
When used as a getter will raise a
ByteAlignErrorif the current position in not byte aligned.