Einzelnen Beitrag anzeigen

TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.936 Beiträge
 
Delphi 12 Athens
 
#1

StrToInt verhält sich komisch

  Alt 15. Apr 2020, 15:21
Delphi-Version: 10.3 Rio
Hallo,

ich kann mir es einfach nicht erklären.
In einem Programm will ich einen Hex-String wie folgt in einen Cardinal oder UInt32 konvertieren:

Delphi-Quellcode:
procedure TMyObject.DoIt(data: string);
var
  n: Cardinal;
begin
  try
    n := System.SysUtils.StrToInt('0x' + Data);
  except
    // tu was
  end;
Immer wenn Data FFFFFFFF ist, gibt's einen RangeCheckError.
Schreibe ich jedoch ein Konsolenprogramm, welches genau dasselbe tut

Delphi-Quellcode:

var
  n: Cardinal;

begin
  try
    n := System.SysUtils.StrToInt('0x' + Data);
    WriteLn(n);
    ReadLn;
  except
    // tu was
  end;
end.
dann wird mir der richtige Wert auf den Bildschirm geschrieben.
So, und bevor ihr mir jetzt mit Compilerschaltern kommt:
ich habe extra im nicht funktionierenden Programm in der Unit Strg-O-O gedrückt
und alle die darauf an die stelle geschriebenen Einstellungsdefines 1:1 in das
Konsolenprogramm übernommen. Das funktioniert immer noch.

In QP hab' ich keinen bugreport zu StrToInt gefunden.

Also: warum dieses unterschiedlche Verhalten?

In meinem Programm ist n natürlich eine lokale Variable in einer Methode und Data wie
oben auch ein Übergabeparameter (ja noch ohne Const).
  Mit Zitat antworten Zitat