Saltar al contenido

Cómo convertir un número entero a un string en alguna base?

José, miembro de nuestro equipo, nos ha hecho el favor de redactar este post ya que controla muy bien el tema.

Solución:

Sorprendentemente, las personas solo daban soluciones que se convertían en bases pequeñas (más pequeñas que la longitud del alfabeto inglés). No hubo ningún intento de dar una solución que se convierta a cualquier base arbitraria de 2 a infinito.

Así que aquí hay una solución súper simple:

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

entonces, si necesita convertir un número súper enorme a la base 577,

numberToBase(67854 ** 15 - 102, 577)le dará una solución correcta:
[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],

Que luego puede convertir a cualquier base que desee

Si necesita compatibilidad con versiones antiguas de Python, puede usar gmpy (que incluye un rápido y completamente general de int-to-string función de conversión, y puede construirse para versiones tan antiguas; es posible que deba probar versiones anteriores, ya que las recientes no han sido probadas para versiones venerables de Python y GMP, solo versiones algo recientes) o, para menos velocidad pero más conveniencia, use Código de Python, por ejemplo, más simplemente:

import string
digs = string.digits + string.ascii_letters


def int2base(x, base):
    if x < 0:
        sign = -1
    elif x == 0:
        return digs[0]
    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)

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

Tienes la opción de añadir valor a nuestro contenido informacional tributando tu veteranía en las anotaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *