Hi Astat, Hi Himitsu,
Leider funktioniert der Code von Himitsu nicht korrekt bei S='0.0.0.0'.
Außerdem hab ich noch ein paar Kleinigkeiten optimiert. Die Abfrage nach
in ['0'..'9'] kann man mit einer Lookuptabelle optimieren.
Hier eine minimal gepimpte und korrigierte Version.
Delphi-Quellcode:
Var
IsDigit : Array [Char] Of Boolean;
Procedure InitIsDigit; // Einmal aufrufen, um Isdigit-Lookup zu initialisieren.
Var
C : Char;
Begin
For C:= #0 to #255 do IsDigit[C] := C in ['0'..'9'];
End;
function GepimpteHimitsuVersionVonIsIp(const aIpString: string): Boolean;
var
pIpString: PChar;
OctetSum, Octet, OctetLength, OctetCount: Integer;
begin
Result := False;
pIpString := PChar(aIpString);
OctetCount := 0;
OctetSum := 0;
while pIpString^ <> #0 do
begin
Inc(OctetCount);
Octet := 0;
OctetLength := 0;
while IsDigit[pIpString^] do
begin
Octet := Octet * 10 + (Ord(pIpString^) - Ord('0'));
Inc(OctetLength);
Inc(pIpString);
end;
inc(OctetSum, Octet); // Summe aller Einzelwerte erstellen. Muss zum Schluss > 0 werden
if (OctetLength = 0) or (Octet > 255) then
Exit;
if OctetCount = 4 then
Break;
if pIpString^ <> '.' then
Exit;
Inc(pIpString);
end;
Result := (OctetSum > 0) and (OctetCount = 4) and (pIpString^ = #0); // Zusätzliche Prüfung auf OctetSum
end;