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