Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion um Stringlänge zu ermitteln (https://www.delphipraxis.net/43696-funktion-um-stringlaenge-zu-ermitteln.html)

choose 7. Apr 2005 12:11

Re: Funktion um Stringlänge zu ermitteln
 
Hallo Luckie,

per definition ist ein Delphi-String nicht durch ein null-Zeichen begrenzt sondern durch die Längenbeschreibung am Anfang des Datenbereichts. Mir ist bewusst, dass er Gründen der vereinfachten Kompatibilität mit einem null-Zeichen endet, um Ausdrücke der Art
Delphi-Quellcode:
PChar(AString)
ohne eine erneute Kopie zu realisieren, aber Deine Implementierung von mylength ist kein Ersatz für Length, weil es Fälle gibt, in denen die Rückgabewerte voneinander abweichen können:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  AString = 'a delphi string can contain '#0' several '#0' null characters';
begin
  Assert( Length(AString) = mylength(AString) );
end;

Luckie 7. Apr 2005 12:21

Re: Funktion um Stringlänge zu ermitteln
 
Jupp. Stimmt, aber auf die Schnelle ist mir nichts besseres eingefallen. ;)

Airblader 7. Apr 2005 12:36

Re: Funktion um Stringlänge zu ermitteln
 
Ich erwähne, dass es auch nicht um die Funktion direkt geht, es ging eig. nur darum, um ihm zu zeigen,
wie das mit eigenen Funktionen, Parametern und Rückgabewerten geht ;)
Die eigentliche Idee war ja auf der meines Freundes basiert, ich hatte sie zuerst nur so umgesetzt

air

Ultimator 7. Apr 2005 14:35

Re: Funktion um Stringlänge zu ermitteln
 
Aber versucht mal, per Code auf MeinString[0] zuzugreifen.
Das mag der Compiler nicht ;)

Jasocul 7. Apr 2005 14:46

Re: Funktion um Stringlänge zu ermitteln
 
Zitat:

Zitat von Ultimator
Aber versucht mal, per Code auf MeinString[0] zuzugreifen.
Das mag der Compiler nicht ;)

Stimmt. Habe ich aber auch schon ein paar Jahre nicht mehr so gemacht. :oops:

Pseudemys Nelsoni 7. Apr 2005 14:56

Re: Funktion um Stringlänge zu ermitteln
 
mit nem statischen string geht das aber, siehe:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string[255];
begin
  s := 'blah';
  Showmessage(IntToStr(Byte(s[0])));
end;

Dax 7. Apr 2005 15:02

Re: Funktion um Stringlänge zu ermitteln
 
Ein "normaler" Pascal-String hat am Anfang soweit ich weiß ein DWORD als Längenbeschreibung, wieso nicht das auslesen?

Delphi-Quellcode:
function MyLen(S: string): Integer;
begin
  Result := PDWORD(Integer(S)-4)^;
end;
Edit: Da war ein Adressoperator zu viel ;)

Pseudemys Nelsoni 7. Apr 2005 15:05

Re: Funktion um Stringlänge zu ermitteln
 
das gibt aber falsche ergebnisse

Airblader 7. Apr 2005 15:07

Re: Funktion um Stringlänge zu ermitteln
 
Zitat:

Zitat von Dax
Ein "normaler" Pascal-String hat am Anfang soweit ich weiß ein DWORD als Längenbeschreibung, wieso nicht das auslesen?

Delphi-Quellcode:
function MyLen(S: string): Integer;
begin
  Result := PDWORD(Integer(@S)-4)^;
end;

Das müsste man nun aber als OT beschreiben. :mrgreen:
Mein Kumpel weiss nichtmal wie man eigene Funktionen deklariert, dann wird er ja schreien bei dem Einzeiler
(da bin ich übrigens auch kurz davor *gg*)

air

mael 7. Apr 2005 15:09

Re: Funktion um Stringlänge zu ermitteln
 
AnsiStrings benutzen ja jetzt 4 Bytes = 1 Integer um die Länge zu speichern, deswegen geht s[0] nicht.

So ähnlich geht es aber immer noch:

Delphi-Quellcode:
function Len(const s: string): Integer;
begin
  if Pointer(s) = nil then
    Result := 0
  else
    Result := PInteger(Cardinal(s) - 4)^;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 Uhr.
Seite 2 von 3     12 3      

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