IPv4 in Int32

Gewöhnliche Subnet Rechner verwenden einen 32-bit Integer für die Berechnung der benötigten Daten. (Mask, Wildcard, Host, Host-range etc…) Jedoch wie ist da möglich? Wie passt eine Zeichenkette wie: 255.255.255.255 in einen Integer?

Theorie

Sehen wir uns die IP-Adresse einmal etwas genauer an.
In der folgenden Tabelle seht Ihr, dass jede Zahl von 0 bis 255 genau 8 Bits, also 1 byte besitzt.

Table

Die IPv4 Adresse besteht genau aus 4x 0-255 Zahlen.
Das entspricht genau 4x 8bit.

Sehen wir uns nun mal die Integer Wertebereiche an.

Range

Wir sehen folgendes:
1.) 8 Byte haben einen Wertebereich von -128 bis 127. Oder 0 bis 255
2.) Ein byte, 4 mal in einen int gespeichert werden kann.

Programmierung

Soweit so gut. Nun kommen wir zur Technischen Umsetzung des Speichern und Ladens eines bytes in einem int. Hierfür benötigen wir folgende Operatoren.
>>>    Alle bits nach rechts OHNE Vorzeichen verschieben.
<<      Alle bits nach links verschieben
&        Logische und Verknüpfung
Für weitere Informationen und Beispiele siehe Programmerbase.

Zuerst teilen wir den IPv4 String in 4 Teile. (Stichwort Split) Diese Teile befinden sich bei mir in der Variable “ipParts”, einem int Array. Nun müssen wir die ersten 8 bits der IPv4 Adresse in einen Int (hier ipAddress) speichern.

Was passiert hier? “ipParts[0]” beinhaltet eine Zahl von 0 bis 255.
Diese wird in den Integer “ipAddress” an die Stelle “24” gespeichert.
Die Zahlen nach dem 255 Bereich der “ipParts[0]” variable gehen hierbei verloren.
Nun sind die ersten 8bit der “ipAddress” Variable gesetzt. Fehlen nur noch die restlichen 24.

Um die Werte aus der Variable “ipAddress” zu retournieren, verwenden wir folgenden Code:

0xff hat zur Folge, dass immer nur 1 byte betrachtet wird. (Und Verknüpfung mit allen bits = Nur die ersten 8 bit bleiben stehen.)

Das wars auch schon! Einfach, oder? 🙂

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.