App que explica cómo convertir hexadecimal a decimal en JavaScript con Vue.JS 2
Como lo dije en otro post, hice una pequeña app que te explica cómo convertir un número hexadecimal a decimal. No es como cuando vimos conversión entre bases con JS, pues eso se hacía pero el lenguaje se encargaba.
Lo que trato de hacer aquí es explicar el procedimiento para realizar la conversión. Esto es por si estamos en nuestras clases de matemáticas discretas o simplemente algún día necesitamos hacer la conversión hexadecimal-decimal a mano.
Nota: te invito a ver una app que convierte bases.
Código fuente y aplicación
El código fuente está en GitHub. Puedes probar la app en línea justo aquí: explicación de conversión hexadecimal a decimal.
Explicación del código
Pues un día andaba buscando por internet y me topé con un documento PDF muy interesante y simple que explicaba cómo convertir hexadecimal a decimal manualmente. Así que como vi que era sencillo, hice una aplicación que explica la conversión (y de paso aprendí a hacerlo).
Lo que tenemos que hacer es recorrer la cadena de derecha a izquierda. En cada iteración, aumentar un contador para saber la posición y sobre todo para elevar el 16 a esa potencia.
Todas las operaciones las vamos poniendo en un arreglo de arreglos. Esta parte no me gustó mucho, siento que es medio sucia pero al final funciona. Cada arreglo dentro del arreglo tiene cadenas que son la operación.
Para las equivalencias usamos un simple diccionario:
const equivalencias = {
"0": 0,
"1": 1,
"2": 2,
"3": 3,
"4": 4,
"5": 5,
"6": 6,
"7": 7,
"8": 8,
"9": 9,
"A": 10,
"B": 11,
"C": 12,
"D": 13,
"E": 14,
"F": 15,
};
Así obtenemos el valor numérico del carácter en un tiempo constante ya que sólo hacemos esto:
let equivalencia = equivalencias[caracter];
Nos evitamos de esta forma ver si son números o letras, pues tenemos ambas cosas.
De ahí para validar el hexadecimal usamos el post que cito al inicio.
Una cosa interesante es dar el focus en el ciclo de vida mounted de Vue; ya que con el simple atributo de autofocus no funcionaba.
Como las operaciones del algoritmo las hacemos de derecha a izquierda pero el ser humano las hace de izquierda a derecha necesitamos girar, voltear o reversear todos los arreglos. Eso lo logramos recorriendo el arreglo de arreglos y aplicando el método reverse
en cada uno de ellos:
this.operaciones.forEach(operaciones => operaciones.reverse());
Y esa es la explicación; muy simple pero ayuda a comprender cuando uno no conoce cómo hacer estas conversiones.