bitstring.py 569 B

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