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.
Deja una respuesta