python and bit shifts and byte order, oh my!
Francesco Bochicchio
bockman at virgilio.it
Sat Sep 11 05:08:38 EDT 2004
On Thu, 09 Sep 2004 22:21:42 -0500, Reid Nichol wrote:
> I played with bit shifts on my PC and tried the same thing on a Mac OS X
> machine. They produced the same results, so I would assume that the way
> the bits and how they are interpreted are as in this link:
>
> http://www.khakipants.org/archives/2003/03/bitlevel_input_and_output.html
>
> At least in memory while the interpreter is running.
>
> It's my first attempt down there and I need to know. So, is this how
> Python works at the bit level?
>
I had similar problems, not for reading/write binary files but to
pack/unpack network binary messages, with bitfields in it, between
big-endian and little-endian computers.
I ended up writing a 'bitstring' class that is loaded with a bunch of
bytes ( e.g. the output of a socket.recv () or a file.read() ) and is
able to read/set any arbitrary group of bits in it in a portable way,
which is not hard, since bits operators works on 'logical intergers' and
are independent of byte order, as others pointed out (I believe this is
also true i C and other languages).
I'm not showing my code, because since then I discovered that in the Net
there are better implementation than mine :-). Just google for "python bit
manipulation" and you will find examples like this:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/113799
which should work with arbitrary length bitstrings, since bit operators
work on long integers, also :-)
More information about the Python-list
mailing list