Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi strtohex (https://www.delphipraxis.net/93873-strtohex.html)

Der_Unwissende 12. Jun 2007 16:26

Re: strtohex
 
Zitat:

Zitat von halinchen
@Der_Unwissende: Schon klar, das meine Lösung nicht optimal ist. Wie immer :mrgreen:. Nein Spaß bei Seite. Sollte ja nur ein Anschauungsmaterial sein.

Schon klar, hab auch gerade noch einen Fehler korrigiert (den ich gemacht habe, ReadBuffer hat keinen Rückgabewert). Wollte es nur kurz erwähnen, da es eben funktionieren würde und schon bei einer Datei von > 1 MByte in echt langes Warten ausarten dürfte. Da kommt sonst schnell die Frage, wie man das denn schneller tun könnte.
Bei meinem ersten Programm, dass da mal größere Dateien (> 100 MByte) öffnen musste war das dann der Unterschied zwischen 1 Minute Ladezeit und < 1 Sekunde. Waren dann noch ein zwei andere Stellen, wo ich das Speicherkopieren in Schleifen durch Move ersetzt habe, macht natürlich einiges aus!

ReVenGer 12. Jun 2007 16:51

Re: strtohex
 
Ich hab da wohl noch nen denkfehler drin.

Delphi-Quellcode:
function StringToHex(str :string) : string;
var
fs:TFileStream;
i : Integer;
b : Byte;
begin
fs := TFileStream.Create('test.gam', fmOpenRead);
try
    For i := 0 to fs.Size do begin
      fs.ReadBuffer(b,sizeof (b));
      //oder fs.ReadByte(b); <-- bin mir nichtt sicher
      str := Str + '|' + IntToHex(b,2);
    end;
finally
fs.Free;
end;
end;
und aufgerufen wird es so

Delphi-Quellcode:
label3.caption:=stringtohex(str);

war jetzt nur damit es schnell geht nen label.
die datei die ich einlese hat nur 30kB.
von daher nichts großes, deshalb habe ich mich auhc für die kleine variante entschieden.


aber das programm erzeugt einen error.

halinchen 12. Jun 2007 16:57

Re: strtohex
 
Delphi-Quellcode:
function StringToHex : string;
var
fs:TFileStream;
i : Integer;
b : Byte;
begin
result := '';
fs := TFileStream.Create('test.gam', fmOpenRead);
try
    For i := 0 to fs.Size do begin
      fs.ReadBuffer(b,sizeof (b));
      //oder fs.ReadByte(b); <-- bin mir nichtt sicher
      result := result + '|' + IntToHex(b,2);
    end;
finally
fs.Free;
end;
end;
Allerdings solltest du dir bewusstsein, das es vielleicht besser ist, den Spielstand immer im Speicher zu haben (z.B als TMemoryStream). Den sonst musst du dich so blöd mit dem Trennstrich rumärgern.

ErazerZ 12. Jun 2007 17:02

Re: strtohex
 
Delphi-Quellcode:
var
  fs: TFileStream;
  lpBuffer: array of Byte;
  // temporär
  s: string;
  x: Integer;
begin
  // entweder so, oder du ließt es in Blöcken aus und parst sie schon gleich ...
  fs := TFileStream.Create('c:\tmp.txt', fmOpenRead);
  try
    if (fs.Size > 0) then
    begin
      SetLength(lpBuffer, fs.Size);
      fs.Read(lpBuffer[0], fs.Size);
    end;
  finally
    fs.Free;
  end;

  // brauchst nicht - nur ausgabe
  s := '';
  for x := Low(lpBuffer) to High(lpBuffer) do
  begin
    s := s + IntToHex(lpBuffer[x], 2) + ' ';
  end;
  ShowMessage(s);

ReVenGer 12. Jun 2007 17:05

Re: strtohex
 
Bekomme immer die meldung 'incompatible types intger and string"

halinchen 12. Jun 2007 17:12

Re: strtohex
 
Zitat:

Zitat von ReVenGer
Bekomme immer die meldung 'incompatible types intger and string"

an welcher Stelle?

[edit] ich hab jeden Code ausprobiert. Bei mir gehen alle[/edit]

ReVenGer 12. Jun 2007 17:20

Re: strtohex
 
bei der übergabe zum memo,label, etc.

wie rufst du denn die function auf?

ReVenGer 12. Jun 2007 20:22

Re: strtohex
 
bei der übergabe zum memo,label, etc.

wie rufst du denn die function auf?

Klaus01 12. Jun 2007 20:38

Re: strtohex
 
Dann zeige uns doch einmal wie Du es jetzt hast?
So ist nur raten angesagt.

Grüße
Klaus

ReVenGer 12. Jun 2007 20:45

Re: strtohex
 
jetzt hab ich nen streamread error.. ich bau das jetzt nochmal komplett um.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 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