AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein IntToStr bereitet Probleme beim umstieg auf Delphi 12
Thema durchsuchen
Ansicht
Themen-Optionen

IntToStr bereitet Probleme beim umstieg auf Delphi 12

Ein Thema von Kishmet · begonnen am 10. Jan 2025 · letzter Beitrag vom 13. Jan 2025
Antwort Antwort
Seite 1 von 3  1 23      
Kishmet

Registriert seit: 29. Okt 2020
Ort: Großraum Stuttgart
43 Beiträge
 
Delphi 12 Athens
 
#1

IntToStr bereitet Probleme beim umstieg auf Delphi 12

  Alt 10. Jan 2025, 11:03
Guten Morgen zusammen,

wir haben es nun endlich geschafft auf Delphi 12 umzusteigen, leider stehe ich grade vor einem seltsamen "Fehler(?)".

In Delphi 11 hat noch alles getan in Delphi 12 wirft folgender Ausdruck leider einen Fehler (Fehler bei der Bereichsprüfung):

Code:
IntToStr($FFFFFFFFFFFFFFFF);
(Das sind 16 F -> also -1).

Sobald ich folgendes schreibe, geht es witzigerweise. (Das sind nur 15 F)

Code:
IntToStr($FFFFFFFFFFFFFFF);
Vermutlich eine wichtige Info:
Wir Compilieren diese Software als 32bit.

Hat jemand eine Idee woran das liegt? Natürlich ist das oben nur ein (sinnloses aber sehr einfach nachzuvollziehendes) Beispiel.

Vielen lieben Dank fürs Lesen, über Hinweise was sich geändert hat wäre ich super dankbar.

Abhilfe schafft übrigens:
Code:
IntToStr(Integer($FFFFFFFFFFFFFFFF));
Das ist für uns aber eher nicht zielführend, daher würde ich gerne ernsthaft verstehen was los ist um die beste mögliche Lösung zu finden.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.207 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: IntToStr bereitet Probleme beim umstieg auf Delphi 12

  Alt 10. Jan 2025, 11:39
$FFFFFFFFFFFFFFFF wird vermutlich jetzt als UInt interpretiert
D.h. mit einem expliziten Cast sollte es gehen:

IntToStr(Integer($FFFFFFFFFFFFFFFF));
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.524 Beiträge
 
Delphi 7 Professional
 
#3

AW: IntToStr bereitet Probleme beim umstieg auf Delphi 12

  Alt 10. Jan 2025, 11:45
Nur 'ne Vermutung?

Was ergibt $FFFFFFFFFFFFFFFF als Dezimalzahl?
Was ergibt $FFFFFFFFFFFFFFF als Dezimalzahl?

Welchen Dezimalzahlbereich deckt Integer unter 32 Bit ab?

7FFFFFFF (hex) = 2.147.483.647 (dezimal)
80000000 (hex) = -2.147.483.648 (dezimal)

Damit dürften die verwendeten Werte für 32-Bit deutlich zu hoch sein.

Für 64-Bit sind diese Werte

Maximalwert: 7FFFFFFFFFFFFFFF (hex) = 9.223.372.036.854.775.807
Minimalwert: 8000000000000000 (hex) = -9.223.372.036.854.775.808

Demnach sind $FFFFFFFFFFFFFFFF einfach $8000000000000000 zuviel,
in Dezimal entspricht das 92.233.720.368.54.775.808, das ist schon eine ziemlich große Menge (Faktor 10)

Letztlich liegt $FFFFFFFFFFFFFFFF schlicht und einfach außerhalb des für Integer gültigen Bereiches und damit ist die Fehlermeldung "Fehler bei der Bereichsprüfung" absolut korrekt.
  Mit Zitat antworten Zitat
Kishmet

Registriert seit: 29. Okt 2020
Ort: Großraum Stuttgart
43 Beiträge
 
Delphi 12 Athens
 
#4

AW: IntToStr bereitet Probleme beim umstieg auf Delphi 12

  Alt 10. Jan 2025, 11:58
Hallo Bernhard,

ok, das könnte sein. Wüsstest du wo ich eine Änderungsnotiz finden könnte, falls es eine gibt? Ich werde einfach nicht fündig diesbezüglich...

Hallo Delphi.Narium,

für mich auch absolut einleuchtend (nachdem ich kurz gebraucht habe um zu verstehen was du da erklärt hast - vielen Dank dafür!) warum tritt das dann aber jetzt erst mit Delphi 12 auf und war vorher nie ein Thema? Wo liegt die Änderung?

Bisher hat der Wert $FFFF FFFF FFF FFFF einfach -1 ergeben... jetzt erzeugt er den Überlauf... du hast absolut recht, aber trotzdem hat sich etwas verändert und ich würde gerne wissen was
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.524 Beiträge
 
Delphi 7 Professional
 
#5

AW: IntToStr bereitet Probleme beim umstieg auf Delphi 12

  Alt 10. Jan 2025, 12:00
Einmal die Bereichsprüfung beim Kompilieren eingeschaltet, einmal ausgeschaltet.
  Mit Zitat antworten Zitat
Kishmet

Registriert seit: 29. Okt 2020
Ort: Großraum Stuttgart
43 Beiträge
 
Delphi 12 Athens
 
#6

AW: IntToStr bereitet Probleme beim Umstieg auf Delphi 12

  Alt 10. Jan 2025, 12:57
In beiden Versionen ist der Code der Funktion IntToStr der Gleiche, auch drumherum:

Code:
{$IFOPT Q+}
  {$DEFINE __OVERFLOWCHECKS}
  {$OVERFLOWCHECKS OFF}
{$ENDIF}
function IntToStr(Value: Integer): string;
begin
  Result := _IntToStr32(Abs(Value), Value < 0);
end;

function IntToStr(Value: Int64): string;
begin
  Result := _IntToStr64(Abs(Value), Value < 0);
end;
{$IFDEF __OVERFLOWCHECKS}
  {$UNDEF __OVERFLOWCHECKS}
  {$OVERFLOWCHECKS ON}
{$ENDIF}
Sprich es hat sich nichts verändert. Das Verhalten tritt auch bei absolut neuen leeren Projekten auf die nichts anderes enthalten als:
Code:
ShowMessage(IntToStr($FFFFFFFFFFFFFFFF));
Oder möchtest du mir mitteilen das sich das auch tatsächlich Verändert hat? Falls ja, wo finde ich die passende Releasenote?

Geändert von Kishmet (10. Jan 2025 um 12:59 Uhr) Grund: Ergänzung
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.484 Beiträge
 
Delphi 12 Athens
 
#7

AW: IntToStr bereitet Probleme beim umstieg auf Delphi 12

  Alt 10. Jan 2025, 13:12
Die Konstante $FFFFFFFFFFFFFFF ist untypisiert und wird als (2^64 -1) interpretiert.

IntToStr() ist für Integer und Int64 deklariert.
Da ist die Meldung schon richtig.

Hier ist auch eine Typumwandlung notwendig:
Delphi-Quellcode:
const
  i: Integer = Integer($FFFFFFFF);
  i64: Int64 = Int64($FFFFFFFFFFFFFFFF);
Das ist übriegens die Überlaufprüfung, nicht die Bereichsprüfung.

Geändert von Blup (10. Jan 2025 um 13:26 Uhr)
  Mit Zitat antworten Zitat
Kishmet

Registriert seit: 29. Okt 2020
Ort: Großraum Stuttgart
43 Beiträge
 
Delphi 12 Athens
 
#8

AW: IntToStr bereitet Probleme beim umstieg auf Delphi 12

  Alt 10. Jan 2025, 13:26
Hi Blup,

Ja, habe ich auch grade festgestellt... und auch das an der besagten Stelle an der mein Problem auftaucht tatsächlich folgendes gemacht wird:

Code:
IntToStr(Meine_uInt64_Variable)
Aber uInt64 kann IntToStr gar nicht. Gibt es hier eine schlaue Lösung für? Denn Integer(Variable) ist an der Stelle ja einfach Falsch, oder? Und meine Frage bleibt tatsächlich bestehen... was genau hat sich geändert das es jetzt plötzlich Auswirkungen hat?

Geändert von Kishmet (10. Jan 2025 um 13:29 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.484 Beiträge
 
Delphi 12 Athens
 
#9

AW: IntToStr bereitet Probleme beim umstieg auf Delphi 12

  Alt 10. Jan 2025, 13:31
Die Funktion ist überladen:

function IntToStr(Value: Integer): string;
function IntToStr(Value: Int64): string;

Int64() wäre dann die richtige Umwandlung.
  Mit Zitat antworten Zitat
Kishmet

Registriert seit: 29. Okt 2020
Ort: Großraum Stuttgart
43 Beiträge
 
Delphi 12 Athens
 
#10

AW: IntToStr bereitet Probleme beim umstieg auf Delphi 12

  Alt 10. Jan 2025, 13:33
Aber auch int64(Meine_uInt64_var) könnte durchaus Informationsverlust bedeuten, oder übersehe ich gerade etwas?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz