AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IntToStr mal anders

Ein Thema von Nils_13 · begonnen am 17. Nov 2007 · letzter Beitrag vom 17. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

IntToStr mal anders

  Alt 17. Nov 2007, 11:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: IntToStr mal anders

  Alt 17. Nov 2007, 11:16
Hai Nils,

ich kenne FreePascal nicht. Aber "früher" hat man in IntToStr mit mit Delphi-Referenz durchsuchenStr() gemacht.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: IntToStr mal anders

  Alt 17. Nov 2007, 11:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: IntToStr mal anders

  Alt 17. Nov 2007, 11:24
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;
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: IntToStr mal anders

  Alt 17. Nov 2007, 11:30
Zitat von Nils_13:
Ich möchte eigentlich nur aus Interesse wissen, wie das ein Betriebssystemprogrammierer machen würde.
Hi,
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

Re: IntToStr mal anders

  Alt 17. Nov 2007, 11:32
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#7

Re: IntToStr mal anders

  Alt 17. Nov 2007, 11:56
Zitat von Der_Unwissende:
Zitat von Nils_13:
Ich möchte eigentlich nur aus Interesse wissen, wie das ein Betriebssystemprogrammierer machen würde.
Hi,
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
Eigentlich nicht. Du kannst viele Units nicht nehmen, da sie platformspezifisch sind. Audiobibliotheken und so ein Zeug werden gerne übernommen, da sie zu viel Zeit kosten würden und auch nur unnötiger Arbeitsaufwand wären, da hast du recht. Turbo Explorer hab ich übrigens nicht, aber den Code von Delphi7 :
Delphi-Quellcode:
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;
Der sieht aber nicht sehr platformunabhängig aus (System.).

Zu den anderen Codes: und was ist Chr als Funktion oder anders gefragt: wo finde ich diese Funktionen ? SysUtils usw. sieht leer aus.
  Mit Zitat antworten Zitat
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: IntToStr mal anders

  Alt 17. Nov 2007, 12:08
Chr brauchst du auch nicht, kannst gleich "Char" benützen, kommt auf das selbe hinaus.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#9

Re: IntToStr mal anders

  Alt 17. Nov 2007, 12:15
Achso, stimmt. Und wie steht es mit abs ?
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#10

Re: IntToStr mal anders

  Alt 17. Nov 2007, 12:23
Zitat von Nils_13:
Eigentlich nicht. Du kannst viele Units nicht nehmen, da sie platformspezifisch sind. Audiobibliotheken und so ein Zeug werden gerne übernommen, da sie zu viel Zeit kosten würden und auch nur unnötiger Arbeitsaufwand wären, da hast du recht.
Hier stellt sich die Frage, was Du genau unter einem Betriebssystem-Programmierer verstehst. Natürlich sind einige Bibliotheken Plattformspezifisch, aber das ist ein OS ja irgendwie auch. Als Bibliothek verstehe ich aber auch nicht nur eine Delphi-Unit, es gibt auch Sammlungen von Code, der bestimmte Funktionen auf einer bestimmten Architektur anbietet. Zudem wird sicherlich ein Kernel-Entwickler bei einem neuen Kern (OS ist egal) nicht alles verwerfen, was die Vorgänger geleistet haben. Natürlich kann man den Code vom Linux-Kernel nicht ohne weiteres unter BSD oder Windows verwenden, aber darum geht es ja auch nicht. Aber ein OS erzeugt ja nicht umsonst HALs. Da dient ja auch Programmen, die man zum OS zählen könnte, um auf bestimmte Devices möglichst einheitlich zugreifen zu können. Da könnte man jetzt z.B. Libs nennen, die auf POSIX setzen und dann eben auch fragen, ob der reine, nackte Kernel das komplette OS ist (und Du die Kernel-Entwickler als Betriebssytemprogrammierer bezeichnen würdest) oder ob Programme die darauf aufsetzen eben auch noch zum OS gehören können (die dann bestimmt auch Bibliotheken verwenden, die auf der POSIX-Schnittstelle beruhen und damit sogar Plattformunabhängig sind).

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:33 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