Conversor IPv6 ↔ BigInt
Converta endereços IPv6 para/de inteiros de 128 bits
Quick Convert
Batch Input
Results
Results will appear here
About IPv6 Integers
IPv6 addresses are 128-bit integers, ranging from 0 to 2128-1 (340,282,366,920,938,463,463,374,607,431,768,211,455). This tool uses JavaScript's BigInt for precise handling of these large numbers.
O Conversor IPv6 para BigInt transforma endereços IPv6 entre notação hexadecimal com dois-pontos e sua representação numérica de 128-bit usando BigInt para precisão total. Digite um endereço como 2001:db8::1 para obter 42540766411282592856903984951653826561, ou cole um número decimal grande para obter o endereço IPv6 correspondente em formas comprimida e expandida.
Entendendo BigInt para Endereços IPv6
Endereços IPv4 são números de 32-bit que cabem confortavelmente em um tipo inteiro padrão -- o maior valor é cerca de 4,3 bilhões, bem dentro do alcance do tipo numérico de qualquer linguagem de programação moderna. IPv6 é uma história completamente diferente. Com 128 bits, o espaço de endereçamento vai de 0 a 340.282.366.920.938.463.463.374.607.431.768.211.455 -- um número tão grande que tem 39 dígitos. Nenhum inteiro de 64-bit padrão pode armazená-lo, e o tipo Number do JavaScript perde precisão para inteiros maiores que aproximadamente 9 quatrilhões (2^53).
É por isso que BigInt existe. BigInt é um tipo inteiro de precisão arbitrária disponível em JavaScript, Python, Java e na maioria das linguagens modernas. Pode representar números de qualquer tamanho sem arredondamento ou perda de precisão, tornando-o a ferramenta correta para aritmética de endereços IPv6. Quando você converte um endereço IPv6 para sua forma numérica, você precisa de BigInt para obter um resultado exato. Usar um inteiro de 64-bit regular ou um número de ponto flutuante arredondaria silenciosamente o valor, produzindo um endereço próximo ao original, mas não o mesmo -- um bug sutil que pode ser muito difícil de rastrear.
As aplicações práticas da conversão BigInt IPv6 espelham as da conversão IPv4-para-inteiro, mas a escala é diferente. Armazenamento em banco de dados, cálculos de intervalo, enumeração sequencial e cálculo de limites de sub-rede funcionam da mesma forma conceitualmente, mas requerem aritmética BigInt em vez de matemática de inteiros padrão. Se você estiver construindo uma aplicação consciente de IPv6, entender essa conversão é fundamental -- é como você passa da forma hexadecimal com dois-pontos legível por humanos para algo que um banco de dados ou algoritmo possa trabalhar com eficiência.
Como Converter IPv6 para BigInt (e Voltar)
- Digite um endereço IPv6 em qualquer notação válida (comprimida, expandida ou mista) ou um inteiro decimal de 0 a 2^128 - 1
- Clique em Converter para ver a representação equivalente no outro formato
- Visualize o valor BigInt completo, aproximação em notação científica e as formas IPv6 comprimida e expandida
Exemplos de Conversão IPv6 para BigInt
| Endereço IPv6 | Valor BigInt |
|---|---|
:: | 0 |
::1 | 1 |
::ffff:192.168.1.1 | 281473913978881 |
fe80::1 | 338288524927261089654018896841347694593 |
2001:db8::1 | 42540766411282592856903984951653826561 |
2001:db8::ff00:42:8329 | 42540766411282592856904136881884209961 |
ff02::1 | 338963523518870617245727861372981592065 |
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | 340282366920938463463374607431768211455 |
Conversão Passo a Passo: 2001:db8::1
Expanded: 2001:0db8:0000:0000:0000:0000:0000:0001
Hex digits: 20010db8000000000000000000000001
BigInt: 0x20010db8000000000000000000000001
= 42540766411282592856903984951653826561
Conversão Reversa: BigInt 1 para ::1
BigInt: 1
Hex: 0x00000000000000000000000000000001
Grouped: 0000:0000:0000:0000:0000:0000:0000:0001
Compressed: ::1
Quando Usar o Conversor BigInt IPv6
- Armazenamento em banco de dados para IPv6 -- armazene endereços IPv6 como inteiros de 128-bit em bancos de dados que suportam tipos numéricos grandes (PostgreSQL
numeric, MySQLDECIMAL(39,0), ou duas colunasBIGINTpara metades alta/baixa de 64-bit) - Aritmética de intervalo de endereços -- calcule o número de endereços em um prefixo IPv6 calculando
2^(128 - prefix_length), operações que requerem precisão BigInt - Cálculo de limites de sub-rede -- encontre o endereço de rede aplicando uma máscara de bits:
BigInt_address & BigInt_mask, e a transmissão por:BigInt_address | ~BigInt_mask - Enumeração sequencial de endereços -- gere endereços IPv6 consecutivos incrementando o valor BigInt, útil para ferramentas de varredura ou alocação
- Classificação consciente de IPv6 -- ordene endereços IPv6 numericamente comparando seus valores BigInt, evitando a complexidade de comparar strings hexadecimais com dois-pontos
- Visualização do espaço de endereçamento -- converta limites de prefixo em intervalos numéricos para plotagem de alocações IPv6 em linhas de números ou mapas de calor
Como Funciona a Conversão IPv6 para BigInt
O Espaço de Endereçamento de 128 Bits
Endereços IPv6 são valores de 128-bit, produzindo inteiros em um intervalo muito além do que os tipos de número padrão podem manipular:
| Propriedade | Valor |
|---|---|
| Bits | 128 |
| Endereço mínimo | :: = 0 |
| Endereço máximo | ffff:...:ffff = 340.282.366.920.938.463.463.374.607.431.768.211.455 |
| Total de endereços | 2^128 = ~3.4 x 10^38 |
Inteiros de 64-bit padrão maxam em 2^63 - 1 (~9.2 x 10^18), que é aproximadamente 3.7 x 10^19 vezes muito pequeno para IPv6. Number.MAX_SAFE_INTEGER do JavaScript é 2^53 - 1 (~9 x 10^15), ainda mais limitado. BigInt é necessário para aritmética lossless de endereços IPv6.
Algoritmo de Conversão
- Expanda o endereço IPv6 para notação completa de 8 grupos com zeros à esquerda
- Concatene todos os dígitos hex em uma única string hexadecimal de 32 caracteres
- Analise a string hex como um valor BigInt de base-16
// Conversão BigInt JavaScript
const ipv6 = "2001:0db8:0000:0000:0000:0000:0000:0001";
const hex = ipv6.replace(/:/g, ""); // "20010db8000000000000000000000001"
const bigint = BigInt("0x" + hex); // 42540766411282592856903984951653826561n
Estratégias de Armazenamento em Banco de Dados
Como a maioria dos bancos de dados carece de um tipo inteiro nativo de 128-bit, as abordagens comuns incluem:
-- PostgreSQL: Use NUMERIC para armazenamento exato de 128-bit
CREATE TABLE ipv6_addresses (
id SERIAL PRIMARY KEY,
address NUMERIC(39, 0) NOT NULL
);
-- MySQL: Use BINARY(16) para armazenamento compacto
CREATE TABLE ipv6_addresses (
id INT AUTO_INCREMENT PRIMARY KEY,
address BINARY(16) NOT NULL
);
-- Alternativa: Divida em duas metades de 64-bit
CREATE TABLE ipv6_addresses (
id INT AUTO_INCREMENT PRIMARY KEY,
address_high BIGINT UNSIGNED NOT NULL,
address_low BIGINT UNSIGNED NOT NULL
);
Conselhos Práticos para Operações BigInt IPv6
O erro mais comum ao trabalhar com valores BigInt IPv6 é misturar tipos BigInt e Number regulares. Em JavaScript, BigInt e Number são incompatíveis -- você não pode adicionar 1n a 1 sem uma conversão explícita. Isso significa que todo o seu pipeline de aritmética de endereços precisa usar BigInt consistentemente. Se uma função retornar um Number quando um BigInt era esperado, o resultado lançará um TypeError ou silenciosamente perderá precisão, dependendo da linguagem e contexto.
Ao armazenar endereços IPv6 em um banco de dados, considere seus padrões de consulta antes de escolher uma estratégia de armazenamento. PostgreSQL's NUMERIC(39,0) armazena o BigInt completo e suporta consultas de intervalo, mas é mais lento que armazenamento binário para buscas de correspondência exata. MySQL's BINARY(16) é compacto (exatamente 16 bytes) e rápido para correspondências exatas, mas consultas de intervalo requerem conversão para valores numéricos. A abordagem de duas colunas BIGINT divide o endereço em metades de 64-bit altas e baixas, que funciona bem para consultas de intervalo se a maioria da sua filtragem está na porção de rede (bits altos de 64). Escolha a estratégia que corresponde a como você realmente consulta os dados, não a que parece mais limpa no esquema.
Para cálculos de tamanho de prefixo, lembre-se de que números IPv6 crescem muito rápido. Um prefixo /64 contém 2^64 endereços -- cerca de 18,4 quintilhões. Um /48 contém 2^80 endereços. Esses números são úteis para entender a escala do IPv6, mas raramente significam algo para planejamento de capacidade prático. Ninguém vai ficar sem endereços em um /64, portanto a questão é geralmente sobre quantas sub-redes /64 você precisa, não quantos endereços estão em cada uma. Use aritmética BigInt para cálculos de limites, mas pense em termos de contagens de prefixo para planejamento.
Perguntas Frequentes
Por que não posso usar um número JavaScript regular para endereços IPv6?
Números JavaScript são valores de ponto flutuante IEEE 754 de 64-bit que perdem precisão para inteiros maiores que 2^53 (9.007.199.254.740.992). Endereços IPv6 podem alcançar 2^128, que é aproximadamente 10^38 -- muito além do intervalo de inteiros seguros. Usar Number arredondaria silenciosamente o valor, produzindo conversões de endereço incorretas. BigInt fornece inteiros de precisão arbitrária sem arredondamento.
Como calculo o número de endereços em um prefixo IPv6?
Use exponenciação BigInt: 2n ** BigInt(128 - prefix_length). Por exemplo, um prefixo /64 contém 2n ** 64n = 18.446.744.073.709.551.616 endereços. Um /48 contém 2n ** 80n = 1.208.925.819.614.629.174.706.176 endereços. Esses números são muito grandes para tipos inteiros padrão, mas diretos com BigInt.
Há um custo de desempenho ao usar BigInt em vez de Number?
Sim. Operações BigInt são mais lentas que operações Number nativas porque requerem aritmética de precisão arbitrária. Para a maioria dos casos de uso de rede -- converter endereços, computar intervalos, comparar valores -- a diferença de desempenho é negligenciável. Aritmética BigInt se torna notavelmente mais lenta apenas ao realizar milhões de operações em loops apertados, o que é incomum em tarefas de gerenciamento de endereços.
Qual tipo de banco de dados devo usar para endereços IPv6?
Depende do seu caso de uso. Os tipos nativos inet ou cidr do PostgreSQL são a melhor opção se você usar PostgreSQL, pois tratam IPv6 nativamente com operadores integrados. Para MySQL, BINARY(16) é compacto e eficiente. Para portabilidade entre bancos de dados, DECIMAL(39,0) ou NUMERIC(39,0) funcionam em qualquer lugar e suportam consultas de intervalo, embora usem mais armazenamento que alternativas binárias.
Posso converter endereços IPv6 mapeados para IPv4 como ::ffff:192.168.1.1?
Sim. A ferramenta primeiro expande a notação mista para forma hexadecimal completa (0000:0000:0000:0000:0000:ffff:c0a8:0101), depois converte para BigInt normalmente. O valor resultante é 281473913978881, que fica no intervalo mapeado para IPv4 (::ffff:0:0/96).
Ferramentas Relacionadas
- Conversor IPv4 ↔ Inteiro - Converta endereços IPv4 para/de inteiros de 32-bit
- Expandir ↔ Comprimir IPv6 - Converta entre notação IPv6 expandida e comprimida
- Conversor IPv6 ↔ Binário - Converta endereços IPv6 para/de notação binária
- Validador IPv6 - Valide endereços IPv6 (formatos completo e comprimido)
- Conversor IPv6 Mapeado para IPv4 - Converta entre IPv4 e IPv6 mapeado para IPv4 (::ffff:)