IntToStr mal anders
Hi,
wie könnte man ein IntToStr, welches KEINE anderen Units einbindet programmieren ? Es geht eigentlich nicht um Delphi, sondern um FreePascal, aber die Syntax sollte die selbe sein. |
Re: IntToStr mal anders
|
Re: IntToStr mal anders
Ich möchte eigentlich nur aus Interesse wissen, wie das ein Betriebssystemprogrammierer machen würde. Die Funktion Str existiert auch nicht. Könnte man die Erstellen, wäre das ja eine Lösung, aber ich glaube das geht mit div und mod, aber das habe ich (liegt vlt. auch daran, dass ich kein eigenes Betriebssystem habe und es nicht einfach mal so testen konnte) nicht hinbekommen.
|
Re: IntToStr mal anders
Delphi-Quellcode:
function MyIntToStr(Nummer: Integer): string;
var Rest: Integer; Minus: Boolean; begin Minus := (Nummer < 0); repeat Rest := Nummer mod 10; Nummer := Nummer div 10; if (Rest < 0) then Result := chr(Abs(Rest) + $30) + Result else Result := chr(Rest + $30) + Result; until (Nummer = 0); if Minus then Result := '-' + Result; end; |
Re: IntToStr mal anders
Zitat:
warum dann ohne Unit? Dass Du die Unit System nicht explizit einbindest heißt keineswegs, dass Dein Delphi-Programm frei von einer Unit ist! Auch (oder gerade?) Betriebssystemprogrammierer sind Menschen, die haben keine Lust ständig das Rad neu zu erfinden. Natürlich greifen die also auf Bibliotheken zurück! Anders wäre es kaum möglich die Komplexität der heutigen OS so fehlerarm zu erreichen (und ja, auch mir ist klar dass es Fehler gibt, nur wären es wohl ohne Bibliotheken ein paar zig-Tausende mehr). Ansonsten kannst Du natürlich einfach in den Source schauen, der ist doch bei den Turbo Explorer Versionen mit bei, da gibt es sicherlich auch die Implementierung von IntToStr. Gruß Der Unwissende |
Re: IntToStr mal anders
Da war zwar jemand schneller, aber so ähnlich habe ich es auch:
Delphi-Quellcode:
function MyIntToStr(const int: integer): string;
var tmp: integer; begin Result := ''; tmp := int; repeat Result := Chr(abs(tmp) mod 10 + 48) + Result; tmp := tmp div 10; until tmp = 0; if int < 0 then Result := '-' + Result; end; |
Re: IntToStr mal anders
Zitat:
Delphi-Quellcode:
Der sieht aber nicht sehr platformunabhängig aus (System.).
function IntToStr(Value: Integer) : String;
assembler; asm PUSH ESI MOV ESI, ESP SUB ESP, 16 XOR ECX, ECX PUSH EDX XOR EDX, EDX CALL CvtInt MOV EDX, ESI POP EAX CALL System.@LStrFromPCharLen ADD ESP, 16 POP ESI end; Zu den anderen Codes: und was ist Chr als Funktion oder anders gefragt: wo finde ich diese Funktionen ? SysUtils usw. sieht leer aus. |
Re: IntToStr mal anders
Chr brauchst du auch nicht, kannst gleich "Char" benützen, kommt auf das selbe hinaus.
|
Re: IntToStr mal anders
Achso, stimmt. Und wie steht es mit abs ?
|
Re: IntToStr mal anders
Zitat:
Gruß Der Unwissende |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz