Hallo mein Lieber
Hätte nicht gedacht, das auch ich Dir mal weiter helfen kann.
Also zuerst die Integer-Werte wandeln is klar denke ich dann kannst du die CreateIPPool benutzen.
Wichtig zu wissen: Die CreateIPPool war die Beste von 3 Versuchen mit dem besten zeitlichen Ergebenissen. Von ?.0.0.0 ?.50.255.255 benötigt sie ca 3-4 sek. Je nach CPU. Die anderen Versuche kommen dabei immer so um die 10-15 Sek weg. Villeicht bekommst Du sie ja noch schneller
.
In dem Fall lass von Dir hören.
Delphi-Quellcode:
type
PIp =
record
p1 :
String;
P2 :
String;
p3 :
String;
p4 :
String;
end;
type
MyIP =
packed record
case Byte
of
0: (D,C,B,A : Byte);
1: (dwValue : DWord);
end;
function SplittIP(
IP:
string): PIp;
var
I: Integer;
begin
Result.p1 := '
';
Result.p2 := '
';
Result.p3 := '
';
Result.p4 := '
';
I := 0;
repeat
Inc(I, 1);
if IP[I] <> '
.'
then
Result.p1 := Result.p1+
IP[I];
until
IP[I] = '
.';
repeat
Inc(I, 1);
if IP[I] <> '
.'
then
Result.p2 := Result.p2+
IP[I];
until
IP[I] = '
.';
repeat
Inc(I, 1);
if IP[I] <> '
.'
then
Result.p3 := Result.p3+
IP[I];
until
IP[I] = '
.';
repeat
Inc(I, 1);
if IP[I] <> '
.'
then
Result.p4 := Result.p4+
IP[I];
until
I = Length(
IP);
end;
function CreateIPPool(sStartIp, sEndIp:
String): TStringList;
var
FromIP, ToIP,
IP: MyIP;
I: Integer;
Adress: PIp;
begin
Result := TStringList.Create;
Adress := SplittIP(sStartIp);
with FromIP
do begin
A := StrToInt(Adress.p1);
B := StrToInt(Adress.p2);
C := StrToInt(Adress.p3);
D := StrToInt(Adress.p4);
end;
Adress := SplittIP(sEndIp);
with ToIP
do begin
A := StrToInt(Adress.p1);
B := StrToInt(Adress.p2);
C := StrToInt(Adress.p3);
D := StrToInt(Adress.p4);
end;
for I := FromIP.dwValue
to ToIP.dwValue
do begin
IP.dwValue := I;
with IP do
Result.Add(Format('
%d.%d.%d.%d',[A,B,C,D]));
end;
end;