The ConstBitStream class¶
ConstBitStream([auto, length, offset, **kwargs])¶
Bitsclass is the base class for
ConstBitStreamand so all of its methods are also available for
ConstBitStreamobjects. The initialiser is also the same as for
Bitsand so won’t be repeated here.
Aligns to the start of the next byte (so that
posis a multiple of 8) and returns the number of bits skipped.
If the current position is already byte aligned then it is unchanged.
>>> s = ConstBitStream('0xabcdef') >>> s.pos += 3 >>> s.bytealign() 5 >>> s.pos 8
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
>>> s = ConstBitStream('0x123456') >>> s.peek(16) ConstBitStream('0x1234') >>> s.peek('hex:8') '12'
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.
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:
nbits as a signed integer.
nbits as an unsigned integer.
nbits as a floating point number.
nbits as a big-endian signed integer.
nbits as a big-endian unsigned integer.
nbits as a big-endian float.
nbits as a little-endian signed int.
nbits as a little-endian unsigned int.
nbits as a little-endian float.
nbits as a native-endian signed int.
nbits as a native-endian unsigned int.
nbits as a native-endian float.
nbits as a hexadecimal string.
nbits as an octal string.
nbits as a binary string.
next bits as an unsigned exp-Golomb.
next bits as a signed exp-Golomb.
next bits as an interleaved unsigned exp-Golomb.
next bits as an interleaved signed exp-Golomb.
nbits as a new bitstring.
next bit as a boolean (True or False).
nbits will be skipped.
>>> s = ConstBitStream('0x23ef55302') >>> s.read('hex:12') '23e' >>> s.read('bin:4') '1111' >>> s.read('uint:5') 10 >>> s.read('bits:4') ConstBitStream('0xa')
readmethod is useful for reading exponential-Golomb codes.
>>> s = ConstBitStream('se=-9, ue=4') >>> s.read('se') -9 >>> s.read('ue') 4
padtoken is not very useful when used in
readas it just skips a number of bits and returns
None. However when used within
unpackit allows unimportant part of the bitstring to be simply ignored.
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('hex:8, uint:6') ['43', 63] >>> s.readlist(['bin:3', 'intle:16']) ['100', -509] >>> s.pos = 0 >>> s.readlist('hex:b, uint:d', b=8, d=6) ['43', 63]
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.
ReadErrorif bs is not found, and
ValueErrorif 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')
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.