# # bitfield manipulation # http://code.activestate.com/recipes/113799/ # Author: Sebastien Keim # class bf(object): def __init__(self,value=0): self._d = value def __getitem__(self, index): return (self._d >> index) & 1 def __setitem__(self,index,value): value = (value&1L)<> start) & mask def __setslice__(self, start, end, value): mask = 2L**(end - start) -1 value = (value & mask) << start mask = mask << start self._d = (self._d & ~mask) | value return (self._d >> start) & mask def __int__(self): return self._d def pack16(v1,v2): f = bf() f[0:8] = v1 f[9:16] = v2 return int(f) def unpack16(v): f = bf(v) return (f[0:8], f[9:16]) def pack24(v1,v2,v3): f = bf() f[0:8] = v1 f[9:16] = v2 f[17:24] = v3 return int(f) def unpack24(v): f = bf(v) return (f[0:8], f[9:16], f[17:24])