In dem Thread
StrToInt löst keine exception aus waren einige verwundert, das StrToInt, StrToIntDef und Val auch Hexadezimale Zahlenstrings als solche erkennen. Da dieses Verhalten nicht dokumentiert ist, kann dieses zu unerwarteten Nebeneffekten führen. Die folgenden drei Funtkionen ändern dieses Verhalten von Delphi und sollten in diesen Fällen Abhilfe schaffen.
Delphi-Quellcode:
function ValNoHex(const s: String; var code: Integer): Longint;
var
I: Integer;
Negative: Boolean;
begin
I := 1;
code := -1;
Result := 0;
Negative := False;
while (I <= Length(s)) and (s[I] = ' ') do
Inc(I);
if I > Length(s) then Exit;
case s[I] of
'-': begin
Negative := True;
Inc(I);
end;
'+': begin
Inc(I);
end;
end;
while I <= Length(s) do
begin
if (Result > (High(Result) div 10)) or (not (s[I] in ['0'..'9'])) then
begin
code := I;
Exit;
end;
Result := Result * 10 + Ord(s[I]) - Ord('0');
Inc(I);
end;
if Negative then
begin
Result := -Result;
end;
code := 0;
end;
function StrToIntNoHex(S: string): Longint;
var
E: Integer;
begin
Result := ValNoHex(S, E);
if E <> 0 then raise EConvertError.CreateResFmt(@SInvalidInteger, [S]);
end;
function StrToIntDefNoHex(S: string; Default: LongInt): Longint;
var
E: Integer;
begin
Result := ValNoHex(S, E);
if E <> 0 then
Result := Default;
end;
...
...
[edit=Chakotay1308]Klassifizierung. Mfg, Chakotay1308[/edit]