translating ascii to binary
Lie
Lie.1296 at gmail.com
Wed Sep 17 12:18:22 EDT 2008
On Sep 17, 11:02 pm, Canned <u... at domain.invalid> 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.
More information about the Python-list
mailing list