Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CodeLibrary BASE64 Unit (https://www.delphipraxis.net/23761-codelibrary-base64-unit.html)

Stoffel1984 9. Jun 2004 08:48


CodeLibrary BASE64 Unit
 
Hallo,

habe grade die Sakura Base64 Unit aus der Code Library mal ausprobiert und bin eigentlich ganz zufrieden. Funktioniert prima mit Strings. Jedoch bekomme ich es mit String Streams nicht hin. Vielleicht hat jemand ne Idee?

Hier mein Code:

Delphi-Quellcode:
procedure TVerarbeitung.Decode64;
var
  sp: TStringStream;
begin
  try
    sp:= TstringSTREAM.Create('');
    try
      Base64.Base64Decode(FDatenstring,Cardinal(FDatenstring.size),sp);
    except
      Application.Terminate;
    end;
  finally
    FDatenstring.CopyFrom(sp,sp.size);
  end;
end;

Wäre euch dankbar, wenn mir das mal jemand kurz erklären oder ggf korrigieren könnte.

Danke1

Stoffel

sakura 9. Jun 2004 09:07

Re: CodeLibrary BASE64 Unit
 
Das geht so gar nicht, da Dein Code auf das Object vom Typ TStringStream zeigt, aber nicht auf den von den Daten belegten Speicher ;)

Nicht getestet, sollte aber gehen:

Delphi-Quellcode:
procedure TVerarbeitung.Decode64;
begin
  FDatenstring.DataString := Base64.Base64Decode(FDatenstring.DataString);
end;
...:cat:...

Stoffel1984 9. Jun 2004 09:36

Re: CodeLibrary BASE64 Unit
 
Hallo,

danke für die schnelle Antwort.
So gehts nicht - DataString ist ReadOnly. Es gibt die Möglichkeit dies über WriteString zu lösen. Nur: Wenn ich

Delphi-Quellcode:
FDatenstring.WriteString(Base64.Base64Decode(FDatenstring.DataString));
mache hängt er mir den DecodedString an den DataString an.

Also bräuchte ich eine Funktion, welche mir den DataSting überschreibt oder ggf. löscht.

Jemand ne Idee?

Gruß,
Stoffel

sakura 9. Jun 2004 09:42

Re: CodeLibrary BASE64 Unit
 
Vorher Position auf 0 setzen.

Delphi-Quellcode:
FDatenstring.Position := 0;
FDatenString.WriteString(Base64.Base64Decode(FDatenstring.DataString));
...:cat:...

Stoffel1984 9. Jun 2004 09:48

Re: CodeLibrary BASE64 Unit
 
Okay...
was aber, wenn der String der vorher drin steht länger ist als der, der reingeschrieben wird?
Dann hab ich ja theoretisch noch Teile des alten Strings hinter dem neuen, oder?

Stoffel

sakura 9. Jun 2004 09:51

Re: CodeLibrary BASE64 Unit
 
Zitat:

Zitat von Stoffel1984
Dann hab ich ja theoretisch noch Teile des alten Strings hinter dem neuen, oder?

Nein, lt. der OH von Delphi ersetzt WriteString alles von der Position bis zum Ende des aktuellen Strings. Evtl. überhängende Daten werden dabei verworfen.

...:cat:...

Stoffel1984 9. Jun 2004 09:57

Re: CodeLibrary BASE64 Unit
 
Super, danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz