Differences between revisions 1 and 2
Revision 1 as of 2005-03-31 19:13:28
Size: 2178
Editor: 168-103-146-113
Comment: notes on bit manipulation in Python
Revision 2 as of 2005-04-01 01:50:23
Size: 2326
Editor: 168-103-146-113
Comment: swap endianness, apply operations to groups,...
Deletions are marked like this. Additions are marked like this.
Line 10: Line 10:
 * Switch Endianness, with different block sizes.
 * Apply operations in block groupings: ex: apply XOR 10101 (5 bits) repeatedly across a field.

I'm looking for information on Python bit manipulation.

It seems that there are no modules for performing Python bit manipulation.

I personally want to be able to:

  • Turn "11011000111101..." into bytes, (padded left or right, 0 or 1,) and vice versa.
  • Slice ranges of bits
  • Rotate bits, addressed by the bit. That is, say: "rotate bits 13-17, wrapping around the edges," or, "rotate bits 13-17, lose bits on the one side, set all new bits to 0."
  • Similarly, revert regions of bits, apply logic to regions of bits, etc.,.
  • Switch Endianness, with different block sizes.
  • Apply operations in block groupings: ex: apply XOR 10101 (5 bits) repeatedly across a field.

The closest thing I've found is [http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/113799 ASPN: bit-field manipulation.]

I imagine that there are many more manipulations people would like to do with bits.

Manipulations

To integer.

   1 >>> print int('00100001', 2)
   2 33

To hex string. Note that you don't need to use x8 bits.

   1 >>> print "0x%x" % int('11111111', 2)
   2 0xff
   3 >>> print "0x%x" % int('0110110110', 2)
   4 0x1b6
   5 >>> print "0x%x" % int('0010101110101100111010101101010111110101010101', 2)
   6 0xaeb3ab57d55

To character. 8 bits max.

   1 >>> chr(int('111011', 2))
   2 ';'
   3 >>> chr(int('1110110', 2))
   4 'v'
   5 >>> chr(int('11101101', 2))
   6 '\xed'

Characters to integers, but not to strings of 1's and 0's.

   1 >>> int('01110101', 2)
   2 117
   3 >>> chr(int('01110101', 2))
   4 'u'
   5 >>> ord('u')
   6 117

Individual bits.

   1 >>> 1 << 0
   2 1
   3 >>> 1 << 1
   4 2
   5 >>> 1 << 2
   6 4
   7 >>> 1 << 3
   8 8
   9 >>> 1 << 4
  10 16
  11 >>> 1 << 5
  12 32
  13 >>> 1 << 6
  14 64
  15 >>> 1 << 7
  16 128

this is the sort of thing we're looking for:

related modules:

BitManipulation (last edited 2016-09-02 07:19:33 by FelixWidmaier)

Unable to edit the page? See the FrontPage for instructions.