IntToStr
IntToStr
Hi,
wie kann man die Funktion IntToStr selbst programmieren bzw. einbinden, um das Programm kleiner zu halten ?
wie kann man die Funktion IntToStr selbst programmieren bzw. einbinden, um das Programm kleiner zu halten ?
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Hallo!
Ich bin mir nicht sicher, ob das Programm soviel kleiner wird, wenn du die unit strutils außen vorlässt.
Prinzipiell kannst du durchaus deine Int-Zahl in zehnerpotenzen zerlegen, indem du sie sukzessive durch kleiner werdende Zehnerpotenzen mittels div dividierst.
Das ist aber auf jeden fall aufwendiger zu programmieren, als die IntToStr zu benutzen
Du kannst die Programmgröße sehr stark mit dem Tool "strip", das Lazarus beiliegt, verkleinern (Faktor 6). Hier werden die Debugger-Informationen im Programm entfernt, die außerhalb des Programmierens nicht benötigt werden. Die Suche in diesem Forum nach "strip" wird detailiertere Informationen liefern.
Gruß, Euklid
Ich bin mir nicht sicher, ob das Programm soviel kleiner wird, wenn du die unit strutils außen vorlässt.
Prinzipiell kannst du durchaus deine Int-Zahl in zehnerpotenzen zerlegen, indem du sie sukzessive durch kleiner werdende Zehnerpotenzen mittels div dividierst.
Das ist aber auf jeden fall aufwendiger zu programmieren, als die IntToStr zu benutzen

Du kannst die Programmgröße sehr stark mit dem Tool "strip", das Lazarus beiliegt, verkleinern (Faktor 6). Hier werden die Debugger-Informationen im Programm entfernt, die außerhalb des Programmierens nicht benötigt werden. Die Suche in diesem Forum nach "strip" wird detailiertere Informationen liefern.
Gruß, Euklid
-
- Beiträge: 15
- Registriert: Fr 28. Aug 2015, 18:44
- OS, Lazarus, FPC: Windows 10 (L 1.4.4, FPC 2.6.4)
- CPU-Target: 64-Bit
- Wohnort: Baden-Württemberg, Deutschland
- Kontaktdaten:
Re:
Hi
ich möchte hier noch etwas hinzufügen:
Die Deaktivierung dieses Knopfes bewirkt die Reduzierung der Größe der .exe-Anwendung (zumindest in Windows) in um oft 90%.
mfg DeveloperCPS
ich möchte hier noch etwas hinzufügen:
Diese Möglichkeit findest du unter Projekt -> Projekteinstellung -> Compilereinstellungen -> DebuggenEuklid hat geschrieben: Du kannst die Programmgröße sehr stark mit dem Tool "strip", das Lazarus beiliegt, verkleinern (Faktor 6). Hier werden die Debugger-Informationen im Programm entfernt, die außerhalb des Programmierens nicht benötigt werden. Die Suche in diesem Forum nach "strip" wird detailiertere Informationen liefern.
Die Deaktivierung dieses Knopfes bewirkt die Reduzierung der Größe der .exe-Anwendung (zumindest in Windows) in um oft 90%.
mfg DeveloperCPS
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: IntToStr
Am einfachsten ist einfach weg sysutils und objfpc/delphi modi nicht nutzen.
sysutils bring exception handling mit, ist ein paar kb. objpas hat auch etwas overhead. Man muss meistens Turbo Pascal aehnlich programmieren für minimaler Große.
Classes importiert sysutils, also classes nutzen ist sysutils nutzen.
Man soll auch einmal den 16-bits 8086 dos Target anschauen wenn man programmieren will wie 1990.
sysutils bring exception handling mit, ist ein paar kb. objpas hat auch etwas overhead. Man muss meistens Turbo Pascal aehnlich programmieren für minimaler Große.
Classes importiert sysutils, also classes nutzen ist sysutils nutzen.
Man soll auch einmal den 16-bits 8086 dos Target anschauen wenn man programmieren will wie 1990.
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: IntToStr
Ungefähr so könntest du es machen
ob das zu empfehlen ist kann ich nicht sagen
Wenn du die Unit Math nicht verwenden willst ist das eine Hinreichende Approximation für trunc(log10(x));
Edit: habe grade erst gesehen dass dieser Thread uralt ist
Code: Alles auswählen
uses Math;
...
function MyIntToStr(x: Integer);
var i, len: Integer;
begin
len := trunc(log10(x));
SetLength(Result, len);
for i := len-1 downto 0 do
begin
Result[i]:=x mod 10;
x := x div 10;
end;
end;
Wenn du die Unit Math nicht verwenden willst ist das eine Hinreichende Approximation für trunc(log10(x));
Code: Alles auswählen
function MyLog10(x: Integer): Integer;
var i: Integer;
begin
i:=x;
Result := 0;
while i >= 10 do
begin
i := i div 10;
inc(Result);
end;
end;
Re: IntToStr
Ja, Developer CPS scheint es Spaß zu machen, Forenleichen wieder zu beleben.Warf hat geschrieben: Edit: habe grade erst gesehen dass dieser Thread uralt ist
Bin auch schon fast darauf reingefallen.

-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: IntToStr
Code: Alles auswählen
function IntToStr(Value: integer): string;
begin
System.Str(Value, result);
end ;
Wen ich mit der rechten "M-Taste/Finde Deklaration von Str" klicken, wird der Quelltext nicht gefunden.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: IntToStr
Afaik im Compiler drin. Wie Val kann der FPC das von sich aus, ohne extra Unit.Mathias hat geschrieben:Wo ist der Quelltext von System.Str zu finden ?Code: Alles auswählen
function IntToStr(Value: integer): string; begin System.Str(Value, result); end ;
Wen ich mit der rechten "M-Taste/Finde Deklaration von Str" klicken, wird der Quelltext nicht gefunden.
Der Quelltext wäre dann irgendwo hier zu finden:
http://svn.freepascal.org/cgi-bin/viewv ... te#dirlist
-
- Beiträge: 15
- Registriert: Fr 28. Aug 2015, 18:44
- OS, Lazarus, FPC: Windows 10 (L 1.4.4, FPC 2.6.4)
- CPU-Target: 64-Bit
- Wohnort: Baden-Württemberg, Deutschland
- Kontaktdaten:
Re: IntToStr
Ja das habe ich auch gemerkttheo hat geschrieben:Ja, Developer CPS scheint es Spaß zu machen, Forenleichen wieder zu beleben.Warf hat geschrieben: Edit: habe grade erst gesehen dass dieser Thread uralt ist
Bin auch schon fast darauf reingefallen.

-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: IntToStr
(der Compiler ruft ein RTL Routine an, zb fpc_shortstr_sint in rtl/inc/*strings.inc mit *=s,a,w,u nagelang String Typ)theo hat geschrieben:
Afaik im Compiler drin. Wie Val kann der FPC das von sich aus, ohne extra Unit.