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. C -- http://mail.python.org/mailman/listinfo/python-list