Convertir un número de una base a otra en Java

Hola a todos, hoy os voy a explicar como podemos calcular un numero en diferentes bases.

Ya hemos visto algunos artículos sobre como pasar de una base a otra, pero hoy os traigo una función que podemos usar para pasar de una base a otra de manera muy sencilla.

Ten en cuenta, que solo es para bases menores que 10, por lo que para hexadecimal no valdría.

En el caso de que alguna de las bases no sean base 10, tendremos que pasarlo a base 10 y después a la deseada.

Esta es la función en cuestión:


/**
 * Convierte un numero de una base a otra
 *
 * @param numero Numero a convertir
 * @param basex Base del numero a convertir
 * @param basey Base a la que queremos convertir
 * @return numero en formato decimal
 */
public static int basexABaseY(long numero, int basex, int basey) {
    if (basex >= 2 && basex <= 10 && basey >= 2 && basey <= 10) {
        if (basex == 10 || basey == 10) {
            int decimal = 0;
            int digito;
            final long DIVISOR = basey;
            for (long i = numero, j = 0; i > 0; i /= DIVISOR, j++) {
                digito = (int) (i % DIVISOR);
                decimal += digito * Math.pow(basex, j);
            }
            return decimal;
        } else {
            // Lo paso a decimal
            int aDecimal = basexABaseY(numero, basex, 10);
            // Lo paso a la base deseada
            int numeroBaseY = basexABaseY(aDecimal, 10, basey);
            return numeroBaseY;
        }
    } else {
        return -1;
    }
}

Puedes copiarla en tus proyectos.

Veamos algunos ejemplos:

public static void main(String[] args) {

    System.out.println(basexABaseY(10, 10, 2)); // 1010
    System.out.println(basexABaseY(60, 10, 8)); // 74
    System.out.println(basexABaseY(100000, 2, 10)); // 32
    System.out.println(basexABaseY(12, 3, 2)); // 101
    System.out.println(basexABaseY(10, 2, 8)); // 2

}

Este es el resultado:

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

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