Thanks Gabriel , MRAB and Mark Instead of using the bitwise operator on the unpacked data I was trying to do a bitwise operator directly after read. This was giving the unsupported operand error
i.e # version in my code - wrong file.read(2) & 0x001f Instead of # version in my example and now in my working code (element1,) = struct.unpack("<H",file.read(2) ) Tonethrufour = element1 & 0x1F I only realized it after I read your replies and went back to my actual code which had the mistake . Thanks a lot again. Hari Thanks for your help and hope I dont commit any more such stupid mistakes On Feb 23, 11:27 pm, "Mark Tolonen" <m8r-yft...@mailinator.com> wrote: > "harijay" <hari...@gmail.com> wrote in message > > news:4c7d58a1-830f-4f02-ba07-aa4910f5f...@b16g2000yqb.googlegroups.com... > > > > > In my last post I had asked about reading data from a binary file > > using the struct module. > > Thanks to some excellent help , I have managed to read in > > successfully > > most of the header of this binary format that I want to parse. These > > are some time-voltage traces from a digital > > to analog converter for my experiments. The output is according to a > > format > > mentioned here : (http://www.dataq.com/support/techinfo/ff.htm) > > > I have a question about how to bitmask a bunch of bytes read in from > > such a binary formatted file . > > > For eg the spec says the first two bytes have different parameters in > > different bits . > > Byte 1 Byte 0 > > SN16 SD9 SD8 SD7 SD6 SD5 SD4 SD3 > > SD2 SD1 SD0 T4 T3 T2 T1 T0 > > > I am reading in the two bytes using the following code > > > import struct > > f.seek(0) > > element1_format = struct.Struct("<H") > > (element1,) = element1_format.unpack(f.read(2)) > > > Now element1 has type "str" . How do I apply a bitmask to this to get > > at information in the component bits . > > Since the entire file format has many such bitmasked fields and since > > this is my first venture into binary formats and c-type structs , I > > wanted to know how to read values inside a byte using python. > > My few tries at using bitwise operators ( element1 & 0x001f) are > > frustrated by messages that say " unsupported operand type(s) for &: > > 'str' and 'int' " . > > How can I keep my string objects as bits and apply bitmasks to them > > Any help in this will be greatly appreciated. > > Thanks > > hari > > Please post a small example that fails as you describe. From your example, > element1 should be an int (unpacked from two bytes), and there is no f > defined. Without the actual code we can't figure out what you are doing > wrong. > > This works as expected: > > >>> import struct > >>> format = struct.Struct("<H") > >>> (element1,) = format.unpack('aa') # a two-byte string to unpack > >>> print hex(element1) > 0x6161 > >>> print element1 & 0x1f > > 1 > > -Mark -- http://mail.python.org/mailman/listinfo/python-list