AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wie benutzt man Wolfgang Erhardts Base64 Unit?

Wie benutzt man Wolfgang Erhardts Base64 Unit?

Ein Thema von DieDolly · begonnen am 15. Jul 2019 · letzter Beitrag vom 16. Jul 2019
Antwort Antwort
DieDolly

Registriert seit: 22. Jun 2018
1.901 Beiträge
 
#1

Wie benutzt man Wolfgang Erhardts Base64 Unit?

  Alt 15. Jul 2019, 17:27
Ich komme mit den WE Units mal wieder nicht klar. Und ne, andere möchte ich nicht nutzen.
Wie enkodiert man einen String in Base64 mit den WE Units?
Der Funktionskopf
Delphi-Quellcode:
procedure EncodeBase64(psrc,pdest: pointer; lsrc,ldest: word; var LA: word);
  {-Base64 encode src to dest, LA result length of dest string}
Src habe ich. Dest scheint nur ein leerer PChar zu sein. lsrc also die Länge von Source habe ich auch. Aber woher soll ich die ldst Länge von dest wissen ?!

Das hier scheint eher nicht zu funktionieren
Delphi-Quellcode:
function Base64(const Text: PChar): string;
var
 Dest: PChar;
 L: Word;
begin
 EncodeBase64(Text, Dest, Length(Text), Length(Dest), L);
 Result := Dest;
end;

Geändert von DieDolly (15. Jul 2019 um 17:32 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
372 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Wie benutzt man Wolfgang Erhardts Base64 Unit?

  Alt 15. Jul 2019, 17:52
Ich komme mit den WE Units mal wieder nicht klar. Und ne, andere möchte ich nicht nutzen.
Wie enkodiert man einen String in Base64 mit den WE Units?
Der Funktionskopf
Delphi-Quellcode:
procedure EncodeBase64(psrc,pdest: pointer; lsrc,ldest: word; var LA: word);
  {-Base64 encode src to dest, LA result length of dest string}
Src habe ich. Dest scheint nur ein leerer PChar zu sein. lsrc also die Länge von Source habe ich auch. Aber woher soll ich die ldst Länge von dest wissen ?!

Das hier scheint eher nicht zu funktionieren
Delphi-Quellcode:
function Base64(const Text: PChar): string;
var
 Dest: PChar;
 L: Word;
begin
 EncodeBase64(Text, Dest, Length(Text), Length(Dest), L);
 Result := Dest;
end;
Du mußt der Routine den Speicher übergeben, den sie füllen soll, z. B.

Dest: String;
begin
SetLength(Dest, Lenght(Text)*3);
EncodeBase64(Test, @Dest[1]), length(text), length(dest), L);

L sagt Dir dann, wieviel des Dest-Puffers wirklich verwendet wurde.

Cave Unicode! Keine Ahnung ob die Bibliothek mit ANSI oder widechars arbeitet.
Peter Below
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.901 Beiträge
 
#3

AW: Wie benutzt man Wolfgang Erhardts Base64 Unit?

  Alt 15. Jul 2019, 17:59
SetLength(Dest, Lenght(Text)*3); Ist die Multiplikation mit 3 beabsichtigt und warum genau 3?

Zitat:
System.SetLength(Dest, Length(Text) * 3);
Zitat:
[dcc32 Fehler] E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
Den Fehler hatte ich mit SetLength auch noch nie.

Geändert von DieDolly (15. Jul 2019 um 18:02 Uhr)
  Mit Zitat antworten Zitat
jottkaerr

Registriert seit: 2. Jul 2007
Ort: Tuttlingen
80 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Wie benutzt man Wolfgang Erhardts Base64 Unit?

  Alt 15. Jul 2019, 18:13
Zitat:
System.SetLength(Dest, Length(Text) * 3);
Zitat:
[dcc32 Fehler] E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
Den Fehler hatte ich mit SetLength auch noch nie.
Hast Du den Typ von Dest auf String geändert?
Jürgen Krämer
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.901 Beiträge
 
#5

AW: Wie benutzt man Wolfgang Erhardts Base64 Unit?

  Alt 15. Jul 2019, 18:15
Ja aber da kommt nur Chinesisch am Ende bei raus.
Delphi-Quellcode:
// Text: string
var
 Dest: string;
 L: Word;
begin
 System.SetLength(Dest, Length(Text) * 3);
 EncodeBase64(@Text[1], @Dest[1], Length(Text), Length(Dest), L);

 Result := Dest;
end;
Aus ABD sollte eigentlich QUJD werden.
  Mit Zitat antworten Zitat
jottkaerr

Registriert seit: 2. Jul 2007
Ort: Tuttlingen
80 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Wie benutzt man Wolfgang Erhardts Base64 Unit?

  Alt 15. Jul 2019, 19:09
Ist Text immer noch ein PChar? Dann kannst Du ihn direkt verwenden. Mit @Text[1] holst Du dir sonst einen Zeiger auf das zweite Zeichen.
Jürgen Krämer
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#7

AW: Wie benutzt man Wolfgang Erhardts Base64 Unit?

  Alt 15. Jul 2019, 19:41
Delphi-Quellcode:
function EncodeStringUtf8Base64(const Text: string): string;
var
  bufferIn: TArray<Byte>;
  outstr:AnsiString;
  Len: word;
begin
  // wir brauchen ein buffer mit bytes
  bufferIn := TEncoding.UTF8.GetBytes(Text);
  // die ausgabe erfolgt als ansistring
  SetLength(outstr, Length(bufferIn)*3);
  // aufruf der funktion
  base2n.EncodeBase64(@bufferIn[0], PAnsiChar(outstr), Length(bufferIn), Length(outstr), Len);
  // länge des outstr setzen
  SetLength(outstr, Len);
  // ausgabe als string
  Result := string(outstr);
end;
Nur so zur Info:

Mit Base64 werden binäre Daten (Bytes) in einem 7-bit ASCII-Text dargestellt (bzw. alle verwendeten Zeichen gehören in die Menge der 7-bit ASCII Zeichen).
Nicht mehr, nicht weniger.

Geändert von Schokohase (15. Jul 2019 um 19:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.658 Beiträge
 
Delphi 7 Personal
 
#8

AW: Wie benutzt man Wolfgang Erhardts Base64 Unit?

  Alt 15. Jul 2019, 22:34
Zu dem setlength :
Es werden 2 Eingabebytes in 3 Ausgabebytes umgesetzt darum sollte das eigentlich
outlength:=((length(instring)*sizeof(char)+1) shr 1) *3 lauten. Ausserdem ein String als Eingabe für binäre Daten ist freundlich formuliert fehlerträchtig.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.163 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Wie benutzt man Wolfgang Erhardts Base64 Unit?

  Alt 16. Jul 2019, 11:44
Du hast zwar gesagt du willst keine andere Unit nutzen... auch nicht die, die bei Delphi dabei ist?
Delphi-Quellcode:
uses
  System.NetEncoding;

var base64: String;
begin
  base64 := TNetEncoding.Base64.Encode(Text);
end;
Du brauchst keine externe Unit und die Funktionen sind einfach aufzurufen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 02:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf