Conversor IPv4 ↔ Inteiro
Converter endereços IPv4 para/de inteiros de 32 bits
Input IPv4 Addresses
Converts IPv4 addresses to their 32-bit unsigned integer representation.
Conversion Results
Conversion results will appear here
O Conversor IPv4 para Inteiro transforma endereços IPv4 entre notação decimal com pontos (ex: 192.168.1.1) e sua representação inteira sem sinal de 32 bits (ex: 3232235777). Digite um dos dois formatos e obtenha a conversão instantânea com etapas de cálculo intermédio, equivalente hexadecimal e detalhamento binário mostrando como cada octeto contribui ao valor final.
Entendendo Representação de Inteiro IPv4
Por trás dos bastidores, cada endereço IPv4 é apenas um número de 32 bits. A notação decimal com pontos que usamos todos os dias -- 192.168.1.1 -- é uma forma amigável de escrever aquele número dividindo os 32 bits em quatro pedaços de 8 bits (octetos) e mostrando cada um como um valor decimal de 0 a 255. A forma inteira é o mesmo número escrito como um único valor, que para 192.168.1.1 é 3.232.235.777. Ambas as representações apontam para exatamente o mesmo endereço; a única diferença é como escrevemos isso.
A forma inteira importa na prática porque computadores trabalham com números, não strings com pontos. Quando você armazena um endereço IP em um banco de dados, armazenamento de string funciona mas desperdiça espaço e faz consultas de intervalo não confiáveis. Uma coluna VARCHAR(15) usa até 15 bytes, enquanto um INT UNSIGNED usa exatamente 4 bytes -- uma redução de 70%. Mais importante ainda, comparação de string produz resultados errados para consultas de intervalo: a string "9.0.0.0" se classifica depois de "10.0.0.0" alfabeticamente, mesmo que o endereço 9.0.0.0 venha antes de 10.0.0.0 numericamente. Armazenamento inteiro resolve ambos os problemas de uma vez.
Esta conversão também desbloqueia aritmética simples para manipulação de endereço. Quer saber se um endereço cai dentro de uma subnet? Converta o endereço, o endereço de rede e o endereço de broadcast para inteiros, depois verifique se o inteiro de endereço cai entre os outros dois. Quer gerar todos os endereços em um intervalo? Comece no primeiro inteiro e incremente até chegar ao último. Quer encontrar o próximo endereço disponível depois de um dado? Apenas adicione um ao inteiro. Todas essas operações são triviais com inteiros e complicadas com strings decimal com pontos.
Como Converter IPv4 para Inteiro (e de Volta)
- Digite um endereço IPv4 em formato decimal com pontos ou um inteiro sem sinal de 32 bits (0 a 4294967295)
- Clique Converter para ver a representação equivalente no outro formato
- Veja o cálculo intermédio mostrando como cada octeto contribui ao valor inteiro
Exemplos de Conversão IPv4 para Inteiro
| Endereço IPv4 | Inteiro | Hex |
|---|---|---|
0.0.0.0 | 0 | 0x00000000 |
0.0.0.1 | 1 | 0x00000001 |
1.0.0.0 | 16777216 | 0x01000000 |
10.0.0.1 | 167772161 | 0x0A000001 |
127.0.0.1 | 2130706433 | 0x7F000001 |
172.16.0.1 | 2886729729 | 0xAC100001 |
192.168.0.1 | 3232235521 | 0xC0A80001 |
192.168.1.1 | 3232235777 | 0xC0A80101 |
192.168.1.255 | 3232236031 | 0xC0A801FF |
255.255.255.255 | 4294967295 | 0xFFFFFFFF |
Conversão Passo a Passo: 192.168.1.1
Octeto 1: 192 x 256^3 = 192 x 16.777.216 = 3.221.225.472
Octeto 2: 168 x 256^2 = 168 x 65.536 = 11.010.048
Octeto 3: 1 x 256^1 = 1 x 256 = 256
Octeto 4: 1 x 256^0 = 1 x 1 = 1
─────────────
Total: 3.232.235.777
Conversão Reversa: 167772161 para 10.0.0.1
167772161 / 16777216 = 10 resto 1 → Octeto 1: 10
1 / 65536 = 0 resto 1 → Octeto 2: 0
1 / 256 = 0 resto 1 → Octeto 3: 0
1 / 1 = 1 → Octeto 4: 1
→ Resultado: 10.0.0.1
Quando Usar o Conversor de Inteiro IPv4
- Otimização de armazenamento em banco de dados -- armazenar endereços IP como inteiros de 4 bytes (
INT UNSIGNEDem MySQL,integerem PostgreSQL) ao invés de strings de 15 caracteres, reduzindo armazenamento em 70% e habilitando consultas de intervalo indexadas - Buscas de intervalo de IP -- determinar se um endereço cai dentro de um intervalo usando comparação numérica simples:
ip_integer BETWEEN start_integer AND end_integer - Geração de endereço sequencial -- calcular o próximo ou anterior endereço IP incrementando ou decrementando o valor inteiro
- Ordenação de endereços IP -- ordenar endereços em ordem numérica correta ordenando seus equivalentes inteiros, evitando problemas lexicográficos onde
9.0.0.0se classificaria depois de10.0.0.0com ordenação de string - Consultas de banco de dados GeoIP -- muitos bancos de dados GeoIP armazenam intervalos como pares inteiros para desempenho de busca rápida
- Ferramentas de varredura de rede -- enumerar todos os endereços em um intervalo iterando do inteiro inicial para o inteiro final
Como Funciona a Conversão IPv4 para Inteiro
A Estrutura de Endereço de 32 Bits
Um endereço IPv4 é fundamentalmente um número binário de 32 bits. A notação decimal com pontos que temos -- 192.168.1.1 -- é uma forma legível de escrever aquele número dividindo os 32 bits em quatro octetos de 8 bits. A forma inteira é simplesmente o valor decimal daqueles 32 bits lido como um único número.
IPv4: 192 . 168 . 1 . 1
Binário: 11000000 10101000 00000001 00000001
32-bit: 11000000101010000000000100000001
Inteiro: 3.232.235.777
A Fórmula Geral
Inteiro = (Octeto1 x 2^24) + (Octeto2 x 2^16) + (Octeto3 x 2^8) + Octeto4
Isto é equivalente a (O1 << 24) | (O2 << 16) | (O3 << 8) | O4 usando operações bit a bit, que é como a maioria das linguagens de programação implementam a conversão internamente.
Exemplo de Schema de Banco de Dados
-- MySQL: Armazenar IPv4 como inteiro sem sinal de 32 bits
CREATE TABLE ip_allowlist (
id INT AUTO_INCREMENT PRIMARY KEY,
ip_address INT UNSIGNED NOT NULL,
description VARCHAR(255),
INDEX idx_ip (ip_address)
);
-- Inserir 192.168.1.1
INSERT INTO ip_allowlist (ip_address, description)
VALUES (3232235777, 'Office gateway');
-- Consulta: 192.168.1.100 está no intervalo 192.168.1.0/24?
SELECT * FROM ip_allowlist
WHERE ip_address BETWEEN 3232235776 AND 3232236031;
Conselho Prático para Armazenamento de IP de Inteiro
Ao projetar um schema de banco de dados para endereços IP, a escolha entre armazenamento inteiro e string depende de seus padrões de consulta. Se você principalmente busca endereços individuais por correspondência exata, armazenamento de string com índice funciona bem. Mas no momento que você precisa de consultas de intervalo -- "encontrar todos os endereços nesta subnet" ou "este endereço está em nossa lista de permissão de intervalo?" -- armazenamento inteiro se torna dramaticamente mais rápido e mais correto. A diferença de desempenho é especialmente perceptível com buscas de GeoIP, onde você está procurando através de milhões de intervalos para cada requisição recebida.
Tenha cuidado com inteiros com sinal versus sem sinal. Um inteiro com sinal de 32 bits apenas vai até 2.147.483.647, que corresponde a 127.255.255.255. Qualquer endereço no intervalo 128.0.0.0 através de 255.255.255.255 requer um inteiro sem sinal. Em MySQL, use INT UNSIGNED. Em PostgreSQL, use bigint (já que PostgreSQL não tem um tipo nativo sem sinal de 32 bits) ou armazene como inet que trata isso nativamente. Acertar errado a assinatura causa corrupção silenciosa de dados para endereços acima de 127.255.255.255.
Se você está trabalhando em JavaScript, esteja ciente de que operadores bit a bit tratam números como inteiros com sinal de 32 bits. A expressão (192 << 24) produz um número negativo porque 192 define o bit de sinal. Use o truque de deslocamento à direita sem sinal -- (192 << 24) >>> 0 -- para converter de volta para sem sinal, ou evite operadores bit a bit inteiramente e use multiplicação: 192 * 16777216 + 168 * 65536 + 1 * 256 + 1. Tipo de Number do JavaScript pode seguramente lidar com todos os inteiros IPv4 já que o máximo (4.294.967.295) está bem abaixo do limite inteiro seguro (2^53 - 1).
Perguntas Frequentes
Por que não apenas armazenar endereços IP como strings no banco de dados?
Armazenamento de string funciona mas tem desvantagens. Uma string como "192.168.1.1" usa 13 bytes versus 4 bytes para um inteiro. Mais importante ainda, comparações de string produzem resultados incorretos para consultas de intervalo -- a string "9.0.0.0" é maior que "10.0.0.0" lexicograficamente. Armazenamento inteiro habilita comparações de intervalo corretas com operadores padrão e é significativamente mais rápido para buscas indexadas.
Qual é o intervalo inteiro válido para endereços IPv4?
O intervalo válido é 0 (0.0.0.0) a 4294967295 (255.255.255.255). Este é o intervalo completo de um inteiro sem sinal de 32 bits. Números negativos e valores excedendo 4294967295 são inválidos e não correspondem a qualquer endereço IPv4.
Como lidar com o inteiro em JavaScript?
Tipo de Number de JavaScript trata inteiros seguramente até 2^53 - 1, que é muito maior que o máximo inteiro IPv4 de 2^32 - 1. Aritmética padrão funciona corretamente. No entanto, tenha cuidado com operadores bit a bit em JavaScript, que tratam números como inteiros com sinal de 32 bits -- 192.168.1.1 produziria um resultado negativo com (192 << 24). Use >>> 0 (deslocamento à direita sem sinal por zero) para converter de volta para sem sinal.
Posso usar esta ferramenta para calcular intervalos de subnet?
Sim. Converta o endereço de rede e endereço de broadcast para inteiros, e o intervalo entre eles (inclusive) representa todos os endereços na subnet. Por exemplo, 192.168.1.0/24 tem inteiro de rede 3232235776 e inteiro de broadcast 3232236031, então a subnet contém inteiros 3232235776 através de 3232236031 (256 endereços).
Como isto se relaciona com a função inet_aton() em MySQL?
Função INET_ATON() do MySQL realiza exatamente essa conversão: leva uma string IPv4 decimal com pontos e retorna o inteiro sem sinal de 32 bits. INET_NTOA() faz o reverso. Esta ferramenta realiza o mesmo cálculo, deixando você verificar conversões ou computar valores fora de um contexto de banco de dados.
Ferramentas Relacionadas
- Conversor IPv6 ↔ BigInt - Converter endereços IPv6 para/de inteiros de 128 bits
- Conversor IPv4 ↔ Binário - Converter endereços IPv4 para/de notação binária
- Conversor IPv4 ↔ Hexadecimal - Converter endereços IPv4 para/de hexadecimal
- Validador IPv4 - Validar endereços IPv4 em formato quad-pontilhado estrito
- Detector IPv4 Privado/Público - Detectar se IPv4 é privado, público ou especial