On Sep 17, 11:02 pm, Canned <[EMAIL PROTECTED]> wrote: > Hi, > I'm trying to write a class that can convert ascii to binary and vice > versa. I write my class based on this function I've found on internet > > > > > > > def ascii_to_bin(char): > > ascii = ord(char) > > bin = [] > > > while (ascii > 0): > > if (ascii & 1) == 1: > > bin.append("1") > > else: > > bin.append("0") > > ascii = ascii >> 1 > > > bin.reverse() > > binary = "".join(bin) > > zerofix = (8 - len(binary)) * '0' > > > return zerofix + binary > > > some_string = 'Time to go now, Rummy?' > > > binary = [] > > for char in some_string: > > binary.append(ascii_to_bin(char)) > > > print binary > > print " ".join(binary) > > That works perfectly, but when I try to implement it in my own class it > gives me alot of headache, also because I'm totally new to the language. > It work only with one character at a time, and if I give a string it > just give some weird result. > > > > > > > if len(sys.argv) < 2: > > print 'usage:', os.path.basename(sys.argv[0]), 'text' > > sys.exit() > > > class Converterab: > > ''' > > Ascii-binary converter. > > ''' > > def __init__(self, string): > > self.string = string > > > def ascii_to_bin(self): > > bindump = [] > > for char in self.string: > > bin = ord(char) > > while bin > 0: > > if (bin & 1) == 1: > > bindump.append("1") > > else: > > bindump.append("0") > > bin = bin >> 1 > > bindump.reverse() > > print bindump # Debug tool, delete this > > > ''' > > Zero fix in bindump > > ''' > > bindump.insert(0, "0") > > count = 0 > > pos = 0 > > for dg in bindump: > > count += 1 > > pos += 1 > > if count == 8: > > bindump.insert(pos, "0") > > count = 0 > > bindump.pop() > > print bindump # Debug tool, delete this, the best result > > so far > > > ''' > > Reversing array per byte > > ''' > > final = [] > > pos -= pos # Set pos to 0 again > > while len(bindump) != 0: > > print count # Debug tool, delete this, this is > > weird, start at 1, I expected 0 > > count += 1 > > if count > 8: > > pos += 8 > > count -= count > > final.insert(pos, bindump.pop()) > > print final # Debug tool, delete this > > ''' > > for ar in bindump: > > count += 1 > > if (count < 8): > > final.insert(pos, bindump.pop()) > > elif (count >= 8): > > pos = count > > final.insert(pos, bindump.pop()) > > else: > > final.insert(pos, bindump.pop()) > > ''' > > final.insert(0, final.pop()) > > > binary = "".join(final) > > return binary > > > result = Converterab(sys.argv[1]) > > > print "Char : ", result.ascii_to_bin() > > The problem start at "Reversing array per byte". That block should > reversing the array from 'bindump' and copy it to 'final' per 8 items, > e.g. a = ['0', '1', '0', '1', '0', '1', '0', '1', '2', '1', '2', '1', > '2', '1', '2', '1', '3', '2', '3', '2', '3', '2', '3', '2'] > b = ['3', '2', '3', '2', '3', '2', '3', '2', '2', '1', '2', '1', '2', > '1', '2', '1', '0', '1', '0', '1', '0', '1', '0', '1'] > > Any advice about this matter would be very appreciated. > Thanks in advance.
It'd be easier to make a one-char version of ascii2bin then make the string version based on the one-char version. -- http://mail.python.org/mailman/listinfo/python-list