bitstring.py 568 B

1234567891011121314151617181920
  1. SINGLE_BIT_MASK = [1 << x for x in range(7, -1, -1)]
  2. class BitString(object):
  3. def __init__(self, bytes, length=None, offset=None):
  4. self.bytes = bytes
  5. self.offset = offset if offset is not None else 0
  6. self.length = length if length is not None else 8 * len(data) - self.offset
  7. def __getitem__(self, key):
  8. try:
  9. start = key.start
  10. stop = key.stop
  11. except AttributeError:
  12. if key < 0 or key >= length:
  13. raise IndexError()
  14. byte_index, bit_offset = (divmod(self.offset + key), 8)
  15. return self.bytes[byte_index] & SINGLE_BIT_MASK[bit_offset]