IPv6 ↔ BigInt Converter
Konvertiert ipv6 Adressen zu/von 128-Bit Ganzzahlen
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.
Der IPv6-zu-BigInt-Konverter wandelt IPv6-Adressen zwischen hexadezimaler Doppelpunkt-Notation und ihrer zugrundeliegenden 128-Bit-Ganzzahldarstellung um und nutzt dabei BigInt fuer volle Praezision. Geben Sie eine Adresse wie 2001:db8::1 ein, um 42540766411282592856903984951653826561 zu erhalten, oder fuegen Sie eine grosse Dezimalzahl ein, um die entsprechende IPv6-Adresse sowohl in komprimierter als auch in expandierter Form zu erhalten.
BigInt fuer IPv6-Adressen verstehen
IPv4-Adressen sind 32-Bit-Zahlen, die bequem in einen Standard-Ganzzahltyp passen -- der groesste Wert liegt bei etwa 4,3 Milliarden, was im Bereich jedes modernen Zahlentyps einer Programmiersprache liegt. IPv6 ist eine voellig andere Geschichte. Mit 128 Bit umfasst der Adressraum von 0 bis 340.282.366.920.938.463.463.374.607.431.768.211.455 -- eine Zahl mit 39 Stellen. Kein Standard-64-Bit-Integer kann sie aufnehmen, und JavaScripts Number-Typ verliert die Praezision fuer Ganzzahlen groesser als etwa 9 Billiarden (2^53).
Deshalb gibt es BigInt. BigInt ist ein Ganzzahltyp mit beliebiger Praezision, verfuegbar in JavaScript, Python, Java und den meisten modernen Sprachen. Er kann Zahlen jeder Groesse ohne Rundung oder Praezisionsverlust darstellen und ist damit das richtige Werkzeug fuer IPv6-Adressarithmetik. Wenn Sie eine IPv6-Adresse in ihre numerische Form umwandeln, benoetigen Sie BigInt fuer ein exaktes Ergebnis. Die Verwendung eines regulaeren 64-Bit-Integers oder einer Gleitkommazahl wuerde den Wert stillschweigend runden und eine Adresse erzeugen, die der urspruenglichen aehnlich, aber nicht identisch ist -- ein subtiler Fehler, der sehr schwer zu finden sein kann.
Die praktischen Anwendungen der BigInt-IPv6-Konvertierung entsprechen denen der IPv4-zu-Integer-Konvertierung, aber der Massstab ist ein anderer. Datenbankspeicherung, Bereichsberechnungen, sequentielle Aufzaehlung und Subnetz-Grenzberechnung funktionieren konzeptionell gleich, erfordern aber BigInt-Arithmetik statt Standard-Ganzzahlmathematik. Wenn Sie eine IPv6-faehige Anwendung entwickeln, ist das Verstaendnis dieser Konvertierung grundlegend -- so gelangen Sie vom menschenlesbaren Doppelpunkt-Hex-Format zu etwas, womit eine Datenbank oder ein Algorithmus effizient arbeiten kann.
So konvertieren Sie IPv6 zu BigInt (und zurueck)
- Geben Sie eine IPv6-Adresse in beliebiger gueltiger Notation ein (komprimiert, expandiert oder gemischt) oder eine Dezimalzahl von 0 bis 2^128 - 1
- Klicken Sie auf Convert, um die aequivalente Darstellung im anderen Format zu sehen
- Sehen Sie den vollstaendigen BigInt-Wert, die wissenschaftliche Notationsannaeherung sowie sowohl die komprimierte als auch die expandierte IPv6-Form
Beispiele fuer die IPv6-zu-BigInt-Konvertierung
| IPv6-Adresse | BigInt-Wert |
|---|---|
:: | 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 |
Schritt-fuer-Schritt-Konvertierung: 2001:db8::1
Expandiert: 2001:0db8:0000:0000:0000:0000:0000:0001
Hex-Ziffern: 20010db8000000000000000000000001
BigInt: 0x20010db8000000000000000000000001
= 42540766411282592856903984951653826561
Rueckkonvertierung: BigInt 1 zu ::1
BigInt: 1
Hex: 0x00000000000000000000000000000001
Gruppiert: 0000:0000:0000:0000:0000:0000:0000:0001
Komprimiert: ::1
Wann den IPv6-BigInt-Konverter verwenden
- Datenbankspeicherung fuer IPv6 -- IPv6-Adressen als 128-Bit-Ganzzahlen in Datenbanken speichern, die grosse numerische Typen unterstuetzen (PostgreSQL
numeric, MySQLDECIMAL(39,0)oder zweiBIGINT-Spalten fuer obere/untere 64-Bit-Haelften) - Adressbereichs-Arithmetik -- die Anzahl der Adressen in einem IPv6-Praefix berechnen mit
2^(128 - prefix_length), Operationen die BigInt-Praezision erfordern - Subnetz-Grenzberechnung -- die Netzwerkadresse durch Anwendung einer Bitmaske finden:
BigInt_address & BigInt_mask, und die Broadcast-Adresse durch:BigInt_address | ~BigInt_mask - Sequentielle Adressaufzaehlung -- aufeinanderfolgende IPv6-Adressen durch Inkrementieren des BigInt-Werts generieren, nuetzlich fuer Scan- oder Zuweisungswerkzeuge
- IPv6-faehiges Sortieren -- IPv6-Adressen numerisch durch Vergleich ihrer BigInt-Werte sortieren, wodurch die Komplexitaet des Vergleichs von Doppelpunkt-Hexadezimal-Zeichenketten vermieden wird
- Adressraum-Visualisierung -- Praefix-Grenzen in numerische Bereiche umwandeln, um IPv6-Zuweisungen auf Zahlenlinien oder Heatmaps darzustellen
Wie die IPv6-zu-BigInt-Konvertierung funktioniert
Der 128-Bit-Adressraum
IPv6-Adressen sind 128-Bit-Werte, die Ganzzahlen in einem Bereich weit jenseits der Kapazitaet von Standard-Zahlentypen erzeugen:
| Eigenschaft | Wert |
|---|---|
| Bits | 128 |
| Minimale Adresse | :: = 0 |
| Maximale Adresse | ffff:...:ffff = 340.282.366.920.938.463.463.374.607.431.768.211.455 |
| Gesamtadressen | 2^128 = ~3,4 x 10^38 |
Standard-64-Bit-Ganzzahlen reichen maximal bis 2^63 - 1 (~9,2 x 10^18), was ungefaehr 3,7 x 10^19 Mal zu klein fuer IPv6 ist. JavaScripts Number.MAX_SAFE_INTEGER betraegt 2^53 - 1 (~9 x 10^15), noch begrenzter. BigInt ist erforderlich fuer verlustfreie IPv6-Adressarithmetik.
Konvertierungsalgorithmus
- Expandieren Sie die IPv6-Adresse zur vollstaendigen 8-Gruppen-Notation mit fuehrenden Nullen
- Verketten Sie alle Hex-Ziffern zu einer einzelnen 32-Zeichen-Hex-Zeichenkette
- Parsen Sie die Hex-Zeichenkette als Basis-16-BigInt-Wert
// JavaScript BigInt-Konvertierung
const ipv6 = "2001:0db8:0000:0000:0000:0000:0000:0001";
const hex = ipv6.replace(/:/g, ""); // "20010db8000000000000000000000001"
const bigint = BigInt("0x" + hex); // 42540766411282592856903984951653826561n
Strategien zur Datenbankspeicherung
Da die meisten Datenbanken keinen nativen 128-Bit-Ganzzahltyp haben, sind gaengige Ansaetze:
-- PostgreSQL: NUMERIC fuer exakte 128-Bit-Speicherung verwenden
CREATE TABLE ipv6_addresses (
id SERIAL PRIMARY KEY,
address NUMERIC(39, 0) NOT NULL
);
-- MySQL: BINARY(16) fuer kompakte Speicherung verwenden
CREATE TABLE ipv6_addresses (
id INT AUTO_INCREMENT PRIMARY KEY,
address BINARY(16) NOT NULL
);
-- Alternative: In zwei 64-Bit-Haelften aufteilen
CREATE TABLE ipv6_addresses (
id INT AUTO_INCREMENT PRIMARY KEY,
address_high BIGINT UNSIGNED NOT NULL,
address_low BIGINT UNSIGNED NOT NULL
);
Praktische Hinweise fuer BigInt-IPv6-Operationen
Der haeufigste Fehler bei der Arbeit mit BigInt-IPv6-Werten ist das Mischen von BigInt- und regulaeren Number-Typen. In JavaScript sind BigInt und Number inkompatibel -- Sie koennen 1n nicht zu 1 addieren, ohne eine explizite Konvertierung durchzufuehren. Das bedeutet, dass Ihre gesamte Adressarithmetik-Pipeline durchgaengig BigInt verwenden muss. Wenn eine Funktion einen Number zurueckgibt, wo ein BigInt erwartet wird, wirft das Ergebnis entweder einen TypeError oder verliert stillschweigend die Praezision, je nach Sprache und Kontext.
Beim Speichern von IPv6-Adressen in einer Datenbank sollten Sie Ihre Abfragemuster beruecksichtigen, bevor Sie eine Speicherstrategie waehlen. PostgreSQLs NUMERIC(39,0) speichert den vollstaendigen BigInt und unterstuetzt Bereichsabfragen, ist aber langsamer als binaere Speicherung fuer exakte Abfragen. MySQLs BINARY(16) ist kompakt (genau 16 Bytes) und schnell fuer exakte Abfragen, aber Bereichsabfragen erfordern eine Konvertierung in numerische Werte. Der Zwei-Spalten-BIGINT-Ansatz teilt die Adresse in obere und untere 64-Bit-Haelften auf, was gut fuer Bereichsabfragen funktioniert, wenn der Grossteil Ihrer Filterung auf den Netzwerkteil (obere 64 Bit) entfaellt. Waehlen Sie die Strategie, die zu Ihren tatsaechlichen Abfragemustern passt, nicht die, die im Schema am saubersten aussieht.
Fuer Praefixgroessen-Berechnungen denken Sie daran, dass IPv6-Zahlen sehr schnell sehr gross werden. Ein /64-Praefix enthaelt 2^64 Adressen -- etwa 18,4 Trillionen. Ein /48 enthaelt 2^80 Adressen. Diese Zahlen sind nuetzlich, um den Umfang von IPv6 zu verstehen, aber fuer die praktische Kapazitaetsplanung sind sie selten relevant. Niemand wird in einem /64 keine Adressen mehr haben, daher geht es meist darum, wie viele /64-Subnetze man braucht, nicht wie viele Adressen in jedem einzelnen sind. Verwenden Sie BigInt-Arithmetik fuer Grenzberechnungen, denken Sie aber in Praefixanzahlen fuer die Planung.
Haeufig gestellte Fragen
Warum kann ich fuer IPv6-Adressen keine regulaere JavaScript-Zahl verwenden?
JavaScript-Zahlen sind 64-Bit-IEEE-754-Gleitkommawerte, die die Praezision fuer Ganzzahlen groesser als 2^53 (9.007.199.254.740.992) verlieren. IPv6-Adressen koennen 2^128 erreichen, was ungefaehr 10^38 entspricht -- weit jenseits des sicheren Ganzzahlbereichs. Die Verwendung von Number wuerde den Wert stillschweigend runden und falsche Adresskonvertierungen erzeugen. BigInt bietet Ganzzahlen mit beliebiger Praezision ohne Rundung.
Wie berechne ich die Anzahl der Adressen in einem IPv6-Praefix?
Verwenden Sie BigInt-Potenzierung: 2n ** BigInt(128 - prefix_length). Zum Beispiel enthaelt ein /64-Praefix 2n ** 64n = 18.446.744.073.709.551.616 Adressen. Ein /48 enthaelt 2n ** 80n = 1.208.925.819.614.629.174.706.176 Adressen. Diese Zahlen sind zu gross fuer Standard-Ganzzahltypen, aber mit BigInt unkompliziert.
Gibt es Leistungseinbussen bei der Verwendung von BigInt statt Number?
Ja. BigInt-Operationen sind langsamer als native Number-Operationen, da sie Arithmetik mit beliebiger Praezision erfordern. Fuer die meisten Netzwerkanwendungen -- Adresskonvertierung, Bereichsberechnung, Wertevergleich -- ist der Leistungsunterschied vernachlaessigbar. BigInt-Arithmetik wird erst merklich langsamer, wenn Millionen von Operationen in engen Schleifen durchgefuehrt werden, was bei Adressverwaltungsaufgaben unueblich ist.
Welchen Datenbanktyp sollte ich fuer IPv6-Adressen verwenden?
Das haengt von Ihrem Anwendungsfall ab. PostgreSQLs native inet- oder cidr-Typen sind die beste Wahl, wenn Sie PostgreSQL verwenden, da sie IPv6 nativ mit eingebauten Operatoren verarbeiten. Fuer MySQL ist BINARY(16) kompakt und effizient. Fuer datenbankunabhaengige Portabilitaet funktionieren DECIMAL(39,0) oder NUMERIC(39,0) ueberall und unterstuetzen Bereichsabfragen, obwohl sie mehr Speicherplatz benoetigen als binaere Alternativen.
Kann ich IPv4-gemappte IPv6-Adressen wie ::ffff:192.168.1.1 konvertieren?
Ja. Das Tool expandiert zunaechst die gemischte Notation zur vollstaendigen Hexadezimalform (0000:0000:0000:0000:0000:ffff:c0a8:0101) und konvertiert dann normal zu BigInt. Der resultierende Wert ist 281473913978881, der im IPv4-gemappten Bereich (::ffff:0:0/96) liegt.
Verwandte Tools
- IPv4 ↔ Integer-Konverter - IPv4-Adressen in/aus 32-Bit-Ganzzahlen konvertieren
- IPv6 Expandieren ↔ Komprimieren - Zwischen expandierter und komprimierter IPv6-Notation konvertieren
- IPv6 ↔ Binaer-Konverter - IPv6-Adressen in/aus Binaernotation konvertieren
- IPv6-Validator - IPv6-Adressen validieren (vollstaendige und komprimierte Formate)
- IPv4-gemappter IPv6-Konverter - Zwischen IPv4 und IPv4-gemapptem IPv6 (::ffff:) konvertieren