Moin Moin,
Ich benutze die Funktion MakeIpAddress aus der commctr.pas um den "Wert" einer
IP Adresse (String) zu ermitteln.
Delphi-Quellcode:
function GetIpValue(IPS:
String):int64;
var sl:TStringList;
begin
sl:=TStringList.create;
try
// Oktette der IP Adresse splitten
sl.Delimiter:='
.';
sl.DelimitedText:=IPS;
if sl.count=4
then
begin
// 4 Oktette > IP String könnte gültig sein
try
result:=MakeIpAddress(strToInt(sl[0]),strToInt(sl[1]),strToInt(sl[2]),strToInt(sl[3]));
except
// ungültiger IP String (IPS) > Result auf Broadcastadresse setzen
result:=4294967296;
// 255.255.255.255
end;
end
else begin
// ungültiger IP String (IPS) > Result auf Broadcastadresse setzen
result:=4294967296;
// 255.255.255.255
end;
finally
sl.free;
end;
end;
Die Funktion liefert folgende Ergebnisse
167772161 // 10.0.0.1
167772162 // 10.0.0.2
3232235777 // 192.168.1.1
3232235778 // 192.168.1.2
Die Ergebnisse entsprechen dem Deizmalwert der
IP Adresse.
Code:
Rechenbeispiel 192.168.1.1:
---Oktett 4 - Wert Dezimal 1 ------------------------
2^0 * 1 = 1
2^1 * 0
2^2 * 0
2^3 * 0
2^4 * 0
2^5 * 0
2^6 * 0
2^7 * 0
---Oktett 3 - Wert Dezimal 1 ------------------------
2^8 * 1 = 256
2^9 * 0
2^10 * 0
2^11 * 0
2^12 * 0
2^13 * 0
2^14 * 0
2^15 * 0
---Oktett 2 - Wert Dezimal 168 ------------------------
2^16 * 0
2^17 * 0
2^18 * 0
2^19 * 1 = 524288
2^20 * 0
2^21 * 1 = 2097152
2^22 * 0
2^23 * 1 = 8388608
---Oktett 1 - Wert Dezimal 192 ------------------------
2^24 * 0
2^25 * 0
2^26 * 0
2^27 * 0
2^28 * 0
2^29 * 0
2^30 * 1 = 1073741824
2^31 * 1 = 2147483648
=============================================================
= 3232235777 // 192.168.1.1
Ich scheitere jetzt den Weg zurück (vom int64 zum String).
Delphi-Quellcode:
function GetAddressString(value:int64):String;
var okt1,okt2,okt3, okt4: integer;
begin
// Das 4. Oktett kann ich noch selber. :mrgreen:
okt4 := Value mod 256;
okt3 := :coder2:
okt2 := :coder2:
okt1 := :coder2:
result:=inttostr(okt1)+'.'+inttostr(okt2)+'.'+inttostr(okt3)+'.'+inttostr(okt4);
end;
Kann mir bei den Oktetten 1 bis 3 jemand helfen ?