Hexadecimal

Sistema de numeración que usa 16 símbolos

Tabla que muestra números hexadecimales con los números decimales correspondientes.

El sistema de numeración hexadecimal usa los dígitos 0-9 y las letras A-F para representar los números 0-15.

En esencia, el hexadecimal (16 símbolos) es una extensión del sistema decimal (10 símbolos). Eso significa que puedes representar números del 0 al 15 usando un solo símbolo.

Este sistema es útil para representar bytes, porque medio byte tiene 16 combinaciones distintas, así que puedes representar un byte completo usando solo 2 símbolos hexadecimales. Por eso muchos de los datos que ves en Bitcoin (por ejemplo claves privadas y transacciones) están en hexadecimal.

Las letras hexadecimales pueden escribirse en mayúsculas o minúsculas; no cambia nada (por ejemplo, 1337af es lo mismo que 1337AF).

Hexa = 6, Deci = 10. Así que hexadecimal se refiere al hecho de que este sistema de numeración tiene 16 caracteres distintos.

Convertidor de Números

Convierte un número entre distintas bases (binaria, decimal, hexadecimal).

0b
0 dígitos
0d
0 dígitos
0x
0 dígitos

Hexadecimal a Decimal

Diagrama que muestra cómo convertir hexadecimal a decimal.

Para convertir hexadecimal a decimal, multiplicas cada carácter por potencias crecientes de 16.

  1. Convierte cada símbolo hexadecimal a su valor decimal correspondiente.
  2. Multiplica cada uno de esos valores decimales (del menor al mayor) por una potencia creciente de 16 (por ejemplo, 160, 161, 162, 163, etc.).
  3. Suma todos los resultados para obtener el valor decimal final.

Por ejemplo:

Hexadecimal = 02A13B

B = 11 * 16⁰ = 11
3 = 3  * 16¹ = 48
1 = 1  * 16² = 256
A = 10 * 16³ = 40960
2 = 2  * 16⁴ = 131072
0 = 0  * 16⁵ = 0

Decimal = 0 + 131072 + 40960 + 256 + 48 + 11 = 172347

Esto parece confuso al principio, pero en realidad es exactamente como funciona el sistema decimal también. Cada dígito en un valor decimal representa 10 elevado a una potencia creciente (porque hay 10 dígitos en el sistema decimal, o "base 10"). Por ejemplo, el número 123 está diciendo (1 × 102) + (2 × 101) + (3 × 100), o "un 100, dos 10 y tres 1".

Cualquier número elevado a cero es 1. Por ejemplo, 100 = 1, y 160 = 1.

No necesitas saber convertir hexadecimal a decimal de memoria, pero conviene recordar que, al final, solo estás mirando números cuando miras dígitos y caracteres hexadecimales.

Little-Endian. La mayoría de los números almacenados en los campos de los datos de Bitcoin (por ejemplo, vout y valor) están en little-endian (donde los bytes van en orden inverso), así que necesitas invertir el orden de los bytes antes de convertirlos a decimal.

Ejemplos de Código

Puedes convertir cadenas hexadecimales a decimal en cualquier lenguaje de programación razonable. Debería haber funciones nativas que faciliten esto, así que no necesitas hacer la conversión manualmente.

# hexadecimal a decimal
puts "02A13B".to_i(16) #=> 172347
# hexadecimal a decimal
echo "ibase=16; 02A13B" | bc #=> 172347

Decimal a Hexadecimal

Diagrama que muestra cómo convertir decimal a hexadecimal.

Para convertir decimal a hexadecimal, solo tienes que seguir dividiendo por 16.

El resto de cada división te da el número de cada carácter hexadecimal (del menor al mayor). Luego tomas el resultado de cada división (cociente) y sigues hasta que ya no puedas dividir más (es decir, hasta que el cociente sea cero).

Por ejemplo:

Decimal = 6735

6735 / 16 = 420 (resto 15)
 420 / 16 =  26 (resto  4)
  26 / 16 =   1 (resto 10)
   1 / 16 =   0 (resto  1)

Hexadecimal = 1A4F

Módulo. La operación de módulo (%) devuelve el resto después de la división.

Ejemplos de Código

# decimal a hexadecimal
puts 6735.to_s(16) #=> 1a4f
# decimal a hexadecimal
echo "obase=16; 6735" | bc #=> 1A4F

Bytes

¿Para qué sirve el hexadecimal?

Diagrama que muestra bytes de datos representados en binario, decimal y hexadecimal.

Vas a encontrar muchos caracteres hexadecimales al trabajar con datos brutos de Bitcoin. Por ejemplo, aquí hay una clave privada aleatoria:

f03571c4295fd246cf0babd5ffce52452567272cd8bfb4e63e5cd5d093f39f5b

Esta clave privada representa 32 bytes de datos.

¿Por qué usamos hexadecimal para mostrar bytes? Porque medio byte de datos tiene 16 combinaciones posibles, y hay 16 caracteres hexadecimales distintos. Por lo tanto, podemos representar medio byte con un único carácter hexadecimal, y un byte completo con dos caracteres hexadecimales.

Es una combinación perfecta hecha en el cielo de la informática.

Convertidor de Números

Convierte un número entre distintas bases (binaria, decimal, hexadecimal).

0b
0 dígitos
0d
0 dígitos
0x
0 dígitos

Por ejemplo, en lugar de mostrar los ocho bits individuales usando binario como 10110101, podemos resumirlo a dos caracteres hexadecimales B5 (porque 1011 = B y 0101 = 5).

Así que, en esencia, el sistema hexadecimal es una forma conveniente de mostrar bytes brutos de datos.

Recursos