On Oct 9, 5:30 pm, "Hendrik van Rooyen" <[EMAIL PROTECTED]> wrote: > Is there a canonical way to address the bits in a structure > like an array or string or struct? > > Or alternatively, is there a good way to combine eight > ints that represent bits into one of the bytes in some > array or string or whatever? > > It seems to me that there is a dilemma here : > > if you can write: > > bit3 = 1 > > Then you have to jump through hoops to get > bit0 through bit7 into some byte that you can send > to an i/o routine. > > On the other hand, if you keep the bits "in" the > byte, then you can write: > > byte[3] = '\x7e' > > but you have to jump through hoops to get at > the individual bits. > > Is there a "best" way? > > It would be nice to be able to write: > > if io.byte2.bit3: > do_something() > > if io.byte2 == alarm_value: > do_something_else() > > where: > > io.byte2 & 8 "is" io.byte2.bit3 > > Is this possible? > > - Hendrik
This is tolerable. If you've got a better 'clear' operation than 'xor', you're welcome to it. class BitSet: def __init__( self, value ): self.value= value def __setitem__( self, index, value ): if value: self.value= self.value| (1<< index) elif self[ index ]: self.value= self.value^ (1<< index) def __getitem__( self, index ): return self.value& (1<< index ) def __repr__( self ): return repr( self.value ) if __name__== '__main__': b= BitSet( 15 ) print b b[0]= 0 print b b[0]= 1 print b b[4]= 1 print b b[4]= 0 print b /Output: 15 14 15 31 15 -- http://mail.python.org/mailman/listinfo/python-list