On Mon, Aug 20, 2012 at 11:29 AM, Dennis Lee Bieber <wlfr...@ix.netcom.com> wrote: > I think I typically have done this by going through a hex > representation. > > H2B_Lookup = { "0" : "0000", "1" : "0001", > "2" : "0010", "3" : "0011", > "4" : "0100", "5" : "0101", > "6" : "0110", "7" : "0111", > "8" : "1000", "9" : "1001", > "A" : "1010", "B" : "1011", > "C" : "1100", "D" : "1101", > "D" : "1110", "F" : "1111" } > > def I2B(i): > sgn = " " > if i < 0: > sgn = "-" > i = -i > h = ("%X" % i) > return sgn + "".join([H2B_Lookup[c] for c in h]) > >>>> from i2b import I2B >>>> I2B(10) > ' 1010' >>>> I2B(1238) > ' 010011100110' >>>> I2B(-6) > '-0110' >>>>
I would throw a .lstrip('0') in there to get rid of the ugly leading zeroes (and also add a special case for i == 0). Everybody should know the generic algorithm, though: from itertools import chain def convert(n, base): digits = [chr(x) for x in chain(range(ord('0'), ord('9')+1), range(ord('A'), ord('Z')+1))] if not 2 <= base <= len(digits): raise ValueError("invalid base") output = [] sign = "" if n < 0: n = -n sign = "-" while n > 0: n, r = divmod(n, base) output.append(digits[r]) return sign + ''.join(reversed(output)) or '0' -- http://mail.python.org/mailman/listinfo/python-list