Convertir un número de una base a otra en C#

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

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:



public static long ConvertirBaseXbaseY(long numero, int basex, int basey)
{

    if (basex >= 2 && basex <= 10 && basey >= 2 && basey <= 10) { long numeroConvertir = 0; if (basex == 10 || basey == 10) { long digito = 0; int divisor = basey; for (long i = numero, j = 0; i > 0; i /= divisor, j++)
            {
                digito = i % divisor;
                numeroConvertir += digito * (int)Math.Pow(basex, j);
            }

        }
        else
        {
            long numeroConvertirDec = ConvertirBaseXbaseY(numero, basex, 10);
            numeroConvertir = ConvertirBaseXbaseY(numeroConvertirDec, 10, basey);
        }

        return numeroConvertir;

    }
    else
    {
        return -1;
    }

}

Puedes copiarla en tus proyectos.

Veamos algunos ejemplos:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EjemploConversion
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine(basexABaseY(10, 10, 2)); // 1010
            Console.WriteLine(basexABaseY(60, 10, 8)); // 74
            Console.WriteLine(basexABaseY(100000, 2, 10)); // 32
            Console.WriteLine(basexABaseY(12, 3, 2)); // 101
            Console.WriteLine(basexABaseY(10, 2, 8)); // 2

            Console.ReadLine();
        }

}

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 *