Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Suche String->Hex Funktion (https://www.delphipraxis.net/166950-suche-string-hex-funktion.html)

Sir Rufo 7. Mär 2012 13:43

AW: Suche String->Hex Funktion
 
@DeddyH

Warum so umständlich?
Delphi-Quellcode:
function StrToHex( const s: string ): string;
var
  i : integer;
begin
  for i := 1 to Length( s ) do
    Result := Result + Format( '%.*x', [SizeOf( Char ) * 2, Ord( s[i] )] );
end;

Coffeecoder 7. Mär 2012 13:48

AW: Suche String->Hex Funktion
 
Zitat:

Zitat von Sir Rufo (Beitrag 1155061)
@DeddyH

Warum so umständlich?
Delphi-Quellcode:
function StrToHex( const s: string ): string;
var
  i : integer;
begin
  Result := ''; // <----
  for i := 1 to Length( s ) do
    Result := Result + Format( '%.*x', [SizeOf( Char ) * 2, Ord( s[i] )] );
end;

Muss nicht noch vorher Result initialisiert werden?

DeddyH 7. Mär 2012 13:53

AW: Suche String->Hex Funktion
 
Bei Strings nicht, aber Du darfst das natürlich tun.

Coffeecoder 7. Mär 2012 13:56

AW: Suche String->Hex Funktion
 
Zitat:

Zitat von DeddyH (Beitrag 1155068)
Bei Strings nicht, aber Du darfst das natürlich tun.

Gut dann packe ich einige Funktionen aus, wo ich das immer gemacht habe ;)

DeddyH 7. Mär 2012 13:57

AW: Suche String->Hex Funktion
 
Lass es doch drin, und wenn es nur dem besseren Verständnis dient ;)

himitsu 7. Mär 2012 14:00

AW: Suche String->Hex Funktion
 
Zu 99% geht es auch ohne Initialisierung, aber darauf verlaß dich besser mal nicht. :roll:

Das Result ist leider ein ganz blöder Sonderfall, denn die automatisch Initialisierung von String, dyn. Array und Interface liegt nicht in der Methode, so wie bei den lokalen Variablen, sondern beim Aufrufer und da gibt es ganz nette Seiteneffekte, welche dafür sorgen, daß das Result nicht mit '' vorbelegt sein könnte.

gammatester 7. Mär 2012 14:13

AW: Suche String->Hex Funktion
 
99% scheint mir eine mutige Schätzung, gerade für Delphi 6, denn
Delphi-Quellcode:
function dummy: string;
begin
  result := result + ' oder so';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s := '42';
  s := dummy;
  showmessage(s);
end;
zeigt zB zuverlässig '42 oder so' an. Und im Assembler ist nix zu sehen vom Vorherlöschen.

himitsu 7. Mär 2012 14:47

AW: Suche String->Hex Funktion
 
OK, dann maximal 50%?

Mir war das bisher nur in Schleifen aufgefallen.


Aber das Fazit ist ganz einfach.
Result-Variablen müssen/sollten immer initialisiert werden, wenn mit ihnen gerechnet wird.
Also immer dann, wenn das Result, innerhalb der Funktion, ausgewertet und nicht nur stur gesetzt wird.

Mam muß bedenken, daß bei diesen gemanagten Result-Typen vom Compiler eine Prozedur daraus gemacht wird.
Aus
Delphi-Quellcode:
function dummy(i: Integer): string;
wird
Delphi-Quellcode:
procedure dummy(i: Integer; var Result: string);
, was man im Assembler gut erkennen kann.

p80286 7. Mär 2012 14:59

AW: Suche String->Hex Funktion
 
Zitat:

Zitat von shmia (Beitrag 1155051)
Siehe Code-Library: http://www.delphipraxis.net/39740-he...aerstring.html
Diese Funktionen sind viel schneller als das Zeichenweise anhängen wie im Beispiel oben.

Aber obacht, D2010 hat als Standard 16Bit Chars und da könnte es Probleme geben.
(sizeof statt length nutzen?)

Gruß
K-H

DeddyH 7. Mär 2012 15:01

AW: Suche String->Hex Funktion
 
Besser beides: Length * SizeOf(Char)
Nee, Quatsch, es sind ja beides Strings.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 Uhr.
Seite 2 von 4     12 34      

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