translating ascii to binary
Canned
user at domain.invalid
Wed Sep 17 12:02:15 EDT 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