Re: Efficient Bit addressing in Python.

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Hendrik van Rooyen

    Re: Efficient Bit addressing in Python.

    Lie Ryan wrote:

    >You'll find that in most cases, using integer or Boolean is enough. There
    >are some edge cases, which requires bit addressing for speed or memory
    >optimization s, in python, the usual response to that kind of optimization
    >requirement is to move that part of the code to C.
    >
    >If, for the more usual case, you require the bit addressing because the
    >data structure is more convenient to work with that way, you could use a
    >class that implements the __getitem__, __setitem__, and a "join" method.
    I had a vague feeling that this was the way to go,(see
    my reply to Tino) but I have been resisting, kicking
    and screaming, to get deeply involved in OO - Using
    Tkinter is enough OO for my microprocessor biased
    taste.
    >anyway, if you used str, it isn't hard to have both behavior (easy
    >indexing and easy joining) the bits:
    >
    >>>a =3D '01101010'
    >>>a[0], a[1]
    >('0', '1')
    >>>a
    >'01101010'
    >>>int(a, 2)
    >106
    >>>chr(int(a, 2))
    >'j'
    >>>def bin2int(b): return int(a, 2)
    ....
    >>>def bin2chr(b): return chr(int(a, 2))
    Thanks. This is the best I have seen up to now.

    I was stuck because I was insisting on
    storing real bits in real strings, eight
    bits per byte, instead of storing ascii bits
    and remembering about int(x,2).

    In fact I keep forgetting about the
    second argument of int...

    I could go with a list like this:

    inputs = [['10001000',''],['11110000',''],['01010101','']]

    Where the second entry in the list is a "changed" bit.

    Outputs are a bit more of a hassle - strings are immutable,
    so I can't write:

    input[1][0][3]='1'

    but that is easily fixed by using array.array.

    Thanks for the response

    - Hendrik



Working...