Internamente, los sistemas operativos, routers y bases de datos no almacenan una dirección IP como cuatro números separados por puntos: la guardan como un único entero de 32 bits (IPv4) o 128 bits (IPv6). Este conversor de IP a decimal traduce en ambas direcciones entre la notación punteada habitual y su valor decimal entero, además de mostrar la representación binaria y hexadecimal, útil para depurar máscaras de bits, configuraciones de bajo nivel y consultas SQL sobre rangos de IP almacenados como enteros.
Cómo se calcula el valor decimal de una IPv4
Cada uno de los cuatro octetos ocupa 8 bits, así que el valor decimal total es octeto1×256³ + octeto2×256² + octeto3×256¹ + octeto4×256⁰. Por ejemplo, 192.168.1.1 se descompone como 192×16777216 + 168×65536 + 1×256 + 1 = 3232235777. Este número entero de 32 bits es el que muchas bases de datos usan como tipo INT UNSIGNED para almacenar direcciones IP de forma compacta e indexable, mucho más eficiente que un VARCHAR.
Por qué almacenar IPs como entero en lugar de texto
Guardar una IP como cadena de texto (VARCHAR(15)) impide comparaciones numéricas eficientes y ordenación correcta: '192.168.1.100' < '192.168.1.9' alfabéticamente, aunque numéricamente sea al revés. Convertir a entero de 32 bits permite usar índices B-tree normales, comparar rangos con BETWEEN y almacenar en solo 4 bytes en lugar de hasta 15. Es la técnica que usan las bases de datos de geolocalización por IP (como MaxMind GeoIP) para resolver rangos con consultas rapidísimas.
Representación binaria y hexadecimal para depuración de bajo nivel
La forma binaria de una IP (32 dígitos de 0 y 1 agrupados de 8 en 8) es imprescindible para entender operaciones de máscara AND/OR al calcular subredes a mano. La forma hexadecimal (8 dígitos, como C0A80101 para 192.168.1.1) aparece en volcados de paquetes con tcpdump -X, en configuraciones de firmware embebido y en algunos formatos de log de firewall que registran direcciones sin puntos.
IPv6 y su valor decimal de 128 bits
Convertir una IPv6 a decimal produce un número enorme, de hasta 39 dígitos, porque maneja 128 bits en lugar de 32. Por ejemplo ::1 (loopback IPv6) equivale al entero decimal 1. Como ningún tipo numérico nativo de la mayoría de lenguajes maneja 128 bits sin librerías especiales, este conversor usa aritmética de precisión arbitraria en JavaScript para no perder exactitud, algo que un cálculo ingenuo con Number sí perdería a partir de 2^53.
Conversión inversa: de decimal a puntos
Para volver de un entero a la notación con puntos, se divide sucesivamente por 256 y se toman los restos en orden inverso, o de forma más directa se aplican desplazamientos de bits: octeto1 = (n >>> 24) & 255, octeto2 = (n >>> 16) & 255, y así sucesivamente. Esta operación es común al leer campos ip_int de bases de datos legacy o al depurar un valor volcado por un sistema embebido que solo expone la IP como un entero sin signo.
Uso junto a otras herramientas de red del sitio
Este conversor complementa a la calculadora CIDR y al conversor de máscara de subred: cuando necesitas verificar manualmente por qué una operación de máscara da un resultado inesperado, pasar la IP a binario o decimal permite hacer la comprobación bit a bit y confirmar el resultado que muestra el validador de IP para la misma dirección.
Casos de uso comunes
- Convertir una IP a entero para almacenarla en una columna INT UNSIGNED de MySQL.
- Depurar un log de firewall que registra direcciones en formato decimal sin puntos.
- Verificar manualmente el resultado de una operación AND entre IP y máscara en binario.
- Traducir un valor hexadecimal capturado con tcpdump a una IP legible.
- Comparar dos IPs por rango numérico al construir una base de datos de geolocalización.
Buenas prácticas
- Usa INT UNSIGNED (4 bytes) para IPv4 y un tipo binario de 16 bytes o dos BIGINT para IPv6.
- No uses el tipo Number de JavaScript para IPv6 completa: pierde precisión por encima de 2^53.
- Documenta en el esquema de base de datos si el entero es big-endian, para evitar ambigüedad entre sistemas.
- Verifica siempre con un caso conocido (127.0.0.1 = 2130706433) al implementar tu propia conversión.
- Prefiere tipos nativos INET/CIDR de PostgreSQL cuando estén disponibles en lugar de enteros manuales.