How to convert an integer to a string in any base? How to convert an integer to a string in any base? python python

# How to convert an integer to a string in any base?

Surprisingly, people were giving only solutions that convert to small bases (smaller than the length of the English alphabet). There was no attempt to give a solution which converts to any arbitrary base from 2 to infinity.

So here is a super simple solution:

``def numberToBase(n, b):    if n == 0:        return     digits = []    while n:        digits.append(int(n % b))        n //= b    return digits[::-1]``

so if you need to convert some super huge number to the base `577`,

`numberToBase(67854 ** 15 - 102, 577)`, will give you a correct solution:`[4, 473, 131, 96, 431, 285, 524, 486, 28, 23, 16, 82, 292, 538, 149, 25, 41, 483, 100, 517, 131, 28, 0, 435, 197, 264, 455]`,

Which you can later convert to any base you want

If you need compatibility with ancient versions of Python, you can either use gmpy (which does include a fast, completely general int-to-string conversion function, and can be built for such ancient versions – you may need to try older releases since the recent ones have not been tested for venerable Python and GMP releases, only somewhat recent ones), or, for less speed but more convenience, use Python code – e.g., for Python 2, most simply:

``import stringdigs = string.digits + string.ascii_lettersdef int2base(x, base):    if x < 0:        sign = -1    elif x == 0:        return digs    else:        sign = 1    x *= sign    digits = []    while x:        digits.append(digs[int(x % base)])        x = int(x / base)    if sign < 0:        digits.append('-')    digits.reverse()    return ''.join(digits)``

For Python 3, `int(x / base)` leads to incorrect results, and must be changed to `x // base`:

``import stringdigs = string.digits + string.ascii_lettersdef int2base(x, base):    if x < 0:        sign = -1    elif x == 0:        return digs    else:        sign = 1    x *= sign    digits = []    while x:        digits.append(digs[x % base])        x = x // base    if sign < 0:        digits.append('-')    digits.reverse()    return ''.join(digits)``

``"{0:b}".format(100) # bin: 1100100"{0:x}".format(100) # hex: 64"{0:o}".format(100) # oct: 144``