Michal Szpadzik wrote: > I have some problems with bits data reading. I have binary data file where > data is written as > 12bits pack. I need to read it becouse there are saved values which have to > processed later by my > program. I was wandering about reading 3bytes=24bits and split it by bits > moving. If anyone know > how to do that please tell me or give me some code. > > My data example: > 101001000101111010100101 etc > > i need to split it: > x=101001000101 y=111010100101
assuming MSB first, a = ord(fp.read(1)) b = ord(fp.read(1)) c = ord(fp.read(1)) x = (a << 4) + (b >> 4) y = ((b & 15) << 8) + c should do the trick if you need to read lots of 12-bit values, you can create a simple bitstream generator: def bitstream(file, size=12): bitbuffer = bits = 0 while 1: char = file.read(1) if not char: raise StopIteration bitbuffer = (bitbuffer << 8) | ord(char) bits = bits + 8 while bits >= size: yield (bitbuffer >> (bits - size)) & ((1 << size) - 1) bits = bits - size for example: file = open("file.dat", "rb") for word in bitstream(file): print hex(word) prints 0xa45 0xea5 </F> -- http://mail.python.org/mailman/listinfo/python-list