Hexadecimal a decimal: hacer que un valor hexadecimal signifique algo
Qué hace esta conversión
Lee un valor en base 16 y lo reescribe en base 10. El hexadecimal es cómodo para las máquinas y para quien compara patrones de bits, pero una cifra decimal es lo que necesitas para umbrales, tamaños de byte y cualquier cosa que una persona tenga que juzgar de un vistazo. Esta es la dirección a la que recurres cuando una herramienta te da un valor y deja de explicártelo.
Los pesos de posición son potencias de 16
Leído desde la derecha, cada dígito hexadecimal se multiplica por 1, 16, 256, 4096 y así sucesivamente. Para 1E90FF el valor es 1 × 16 elevado a 5 más 14 × 16 elevado a 4 y lo que sigue, hasta llegar a 2003199. Es la misma suma ponderada que se usa en cualquier base; solo cambian los pesos, y por eso el método sirve igual para binario y octal.
Tabla de conversión de hexadecimal a decimal
Valores hexadecimales que aparecen a diario al depurar y en el trabajo web, con su equivalente decimal. Los hexadecimales redondos son los que merece la pena recordar, porque marcan fronteras de byte y de página.
| Hexadecimal | Decimal |
|---|---|
| 0 | 0 |
| 1 | 1 |
| F | 15 |
| 10 | 16 |
| 7F | 127 |
| A5 | 165 |
| FF | 255 |
| 1000 | 4096 |
| FFFF | 65535 |
| DEADBEEF | 3735928559 |
Qué se descifra en la práctica
Los tres trabajos de siempre son leer un canal de color, comprobar una dirección de memoria contra un límite y convertir un hash truncado en algo comparable. El color es el ejemplo más amable: 0x1E90FF se separa en 30, 144 y 255, lo que dice que el azul está saturado y el rojo flojo. La misma lectura en tres pasos vale para cualquier valor empaquetado y resulta mucho más fácil cuando los bytes están separados.
Parte el valor antes de convertirlo
Un color de seis dígitos o una dirección larga se leen mejor en grupos de dos dígitos, porque cada grupo es un byte. Convertir el valor entero de una vez está bien para obtener una única cifra, pero separarlo antes es lo que te deja ver qué byte es el raro, y esa suele ser la pregunta de verdad.
Preguntas frecuentes
¿Cómo convierto hexadecimal a decimal a mano?
Multiplica cada dígito por su peso —1, 16, 256, 4096 y siguientes desde la derecha— y suma los resultados. Recuerda que A es 10, B es 11 y así hasta F para 15. Para 1E90FF eso da 1048576 + 917504 + 36864 + 0 + 240 + 15, que es 2003199.
¿Por qué las direcciones de memoria parecen números hexadecimales largos?
Porque están alineadas de forma natural con fronteras de byte y de palabra, y los dígitos hexadecimales encajan con esas fronteras mejor que los decimales. Dos dígitos hexadecimales son un byte, así que los primeros dígitos de una dirección describen su página y los últimos su desplazamiento dentro de ella.
¿Puedo pegar un valor con el prefijo 0x?
Sí, el prefijo se reconoce y se quita antes de convertir, de modo que un valor copiado directamente de un depurador o de un archivo fuente funciona sin editarlo. Un prefijo que no corresponde a la base de esta página se señala como error en lugar de ignorarse en silencio, lo que evita que se cuele un valor mal leído.
¿De dónde viene la notación 0x?
Nació en C y se extendió a casi todos los lenguajes que heredaron su sintaxis: la x marca que lo que sigue es un literal hexadecimal. Otros lenguajes usan 0h o un sufijo h, pero la idea es la misma: distinguir 0x20 de 20. Este conversor la reconoce a la entrada y nunca la imprime a la salida.
¿Un prefijo de hash tiene sentido como número?
Aritméticamente sí, en la práctica no. Convertir los primeros bytes de un hash a decimal sirve para detectar patrones o para comparar desde un script, pero un hash truncado ya ha perdido la propiedad que lo hacía hash, así que no trates la forma decimal como un identificador por sí misma.