translating ascii to binary

Canned user at domain.invalid
Wed Sep 17 18:02:15 CEST 2008


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



More information about the Python-list mailing list