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.

Etiquetas

Deja un comentario

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