Convertir de hexadecimal a decimal y viceversa en C#

Hola a todos, hoy os voy a explicar como podemos convertir un numero hexadecimal a decimal y viceversa en C#.

Si queremos pasar de decimal a hexadecimal, es proceso normal es el siguiente:

  • Cogemos el modulo de 16 de ese numero.
  • Si ese resto es menor de 10, se agrega al hexadecimal, sino se obtiene la letra correspondiente.
  • Dividimos el numero entre 16.
  • Repetimos el proceso anterior hasta llegar a 0.

El código para pasar de decimal a hexadecimal:


public static String decimalHexadecimal(int numero)
{

    char[] letras = { 'A', 'B', 'C', 'D', 'E', 'F' };

    String hexadecimal = "";

    const int DIVISOR = 16;
    long resto = 0;

    for (int i = numero % DIVISOR, j = 0; numero > 0; numero /= DIVISOR, i = numero % DIVISOR, j++)
    {
        resto = i % DIVISOR;
        if (resto >= 10)
        {
            hexadecimal = letras[resto - 10] + hexadecimal;

        }
        else
        {
            hexadecimal = resto + hexadecimal;
        }
    }
    return hexadecimal;

}

Si queremos pasar de decimal a hexadecimal, es proceso normal es el siguiente:

  • Recorremos la cadena.
  • Si el carácter actual esta entre 0 y 9, multiplicamos el dígito por 10 elevado a la posición actual.
  • Si el carácter actual esta entre A y F, calculamos el numero al que pertenece la letra y multiplicamos por 10 elevado a la posición actual.
  • En caso deque no sea ninguno de los dos casos anteriores, devuelvo -1.
  • Repetimos el proceso anterior hasta llegar a 0.

El código para convertir de hexadecimal a decimal:


public static int hexadecimalDecimal(String hexadecimal)
{

    int numero = 0;

    const int DIVISOR = 16;

    for (int i = 0, j = hexadecimal.Length - 1; i < hexadecimal.Length; i++, j--)
    {

        if (hexadecimal[i] >= '0' && hexadecimal[i] <= '9')
        {
            numero += (int)Math.Pow(DIVISOR, j) * Convert.ToInt32(hexadecimal[i] + "");
        } else if (hexadecimal[i] >= 'A' && hexadecimal[i] <= 'F') {
            numero += (int)Math.Pow(DIVISOR, j) * Convert.ToInt32((hexadecimal[i] - 'A' + 10) + "");
        }
        else
        {
            return -1;
        }

    }

    return numero;

}

OS dejo un pequeño ejemplo:


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("Escribe un numero decimal");
            int numero = Convert.ToInt32(Console.ReadLine());

            String hexadecimal = decimalHexadecimal(numero);
            Console.WriteLine("El numero decimal " + numero + " en hexadecimal es " + hexadecimal);

            int decimalH = hexadecimalDecimal(hexadecimal);
            Console.WriteLine("El numero hexadecimal " + hexadecimal + " en decimal es " + decimalH);

            Console.ReadLine();
        }

        public static String decimalHexadecimal(int numero)
        {

            char[] letras = { 'A', 'B', 'C', 'D', 'E', 'F' };

            String hexadecimal = "";

            const int DIVISOR = 16;
            long resto = 0;

            for (int i = numero % DIVISOR, j = 0; numero > 0; numero /= DIVISOR, i = numero % DIVISOR, j++)
            {
                resto = i % DIVISOR;
                if (resto >= 10)
                {
                    hexadecimal = letras[resto - 10] + hexadecimal;

                }
                else
                {
                    hexadecimal = resto + hexadecimal;
                }
            }


            return hexadecimal;


        }


        public static int hexadecimalDecimal(String hexadecimal)
        {

            int numero = 0;

            const int DIVISOR = 16;

            for (int i = 0, j = hexadecimal.Length - 1; i < hexadecimal.Length; i++, j--)
            {

                if (hexadecimal[i] >= '0' && hexadecimal[i] <= '9')
                {
                    numero += (int)Math.Pow(DIVISOR, j) * Convert.ToInt32(hexadecimal[i] + "");
                } else if (hexadecimal[i] >= 'A' && hexadecimal[i] <= 'F') {
                    numero += (int)Math.Pow(DIVISOR, j) * Convert.ToInt32((hexadecimal[i] - 'A' + 10) + "");
                }
                else
                {
                    return -1;
                }

            }

            return numero;

        }

    }
}


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.