Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array base64 codieren (https://www.delphipraxis.net/129407-array-base64-codieren.html)

ElThoro 18. Feb 2009 17:00


Array base64 codieren
 
Hallo zusammen!

Ich habe ein Problem, das meine (nicht berauschenden) Delphi-Fähigkeiten übersteigt: Ich habe ein Array, dass ich als Text base64 encoded speichern möchte (in eine XML-Datei).
Beim Umschauen im Netz habe ich festegestellt, dass es viele Units für Delphi gibt, die das codieren/encodieren ermöglichen.
Allerdings erwarten alle, die ich angeschaut habe, entweder einen (Ansi)String oder einen Stream (zum Beispiel DMime/DMimeStreams von http://www.yunqa.de/delphi/doku.php/products/mime/index).
Ich habe nun ein Array (Integer oder Float) vorliegen und habe keine Ahnung, wie ich das in die entsprechenden Typen umwandeln kann.

Als zweite Möglichkeit bliebe, das Array selbst binär auszulesen und zu encodieren/decodieren. Nur habe ich auch keine Ahnung, wie ich das machen könnte - besonders bei Float-Variablen.

Hoffentlich könnt ihr mir helfen. Wenn Ihr weitere Infos braucht, liefere ich sie gerne!
Vielen Dank schonmal

ElThoro

quendolineDD 18. Feb 2009 17:30

Re: Array base64 codieren
 
Dann musst du einfach die Typen umwandeln. Dann musst du außerdem Index für Index das Array an die Funktion an Besten in einer Schleife übergeben

Also so;

Delphi-Quellcode:
for i := 0 to High(Array) do begin Text := Encode(IntToStr(Array[i]); end;
Und wenn du als Float vorliegen hast
Delphi-Quellcode:
for i := 0 to High(Array) do begin Text := Encode(FloatToStr(Array[i]); end;
Lg

ElThoro 19. Feb 2009 10:31

Re: Array base64 codieren
 
Hallo! Ich nochmal :hi:

Vielen Dank für die schnelle Antwort.
Das Zusammenführen der einzelnen Array-Bestandteile ist ein Weg, der funktioniert. Allerdings kann ich beim Dekodieren/Einlesen nicht mehr feststellen, welche Zahlen in ein Feld eines Arrays gehören.

Daher wäre es in meinen Augen sinnvoller, das ganze als Stream zu speichern. Da muss ich mir nur merken, wieviel Bit in einem Feld des Arrays gespeichert werden, um es wiederherstellen zu können...

Gibt es auch eine Möglichkeit, ein Array in einen Stream umzuwandeln ohne den Zwischenschritt, es in eine Datei auf die Festplatte zu schreiben?
Hier http://www.delphipraxis.net/internal...t.php?t=113490 geht es nur über eine Datei. Zur Not würde das auch gehen, aber wenn ich das im Speicher halten könnte, fände ich das besser.

Was meint Ihr? Vielen Dank
ElThoro

Klaus01 19. Feb 2009 10:53

Re: Array base64 codieren
 
Hallo,

ein Array in ein Stream zu kopieren sollte
sich mit TMemoryStream.WriteBuffer bewerkstelligen lassen.

Zitat:

Zitat von DelphiHilfe
procedure WriteBuffer(const Buffer; Count: Longint);

Description

Use WriteBuffer to save data to a stream. WriteBuffer and ReadBuffer are used in cases where the number of bytes is known and required, for example when reading in structures. Use WriteBuffer for standard file I/O streaming.

WriteBuffer is used internally for writing to a stream and copying from a stream. It is used by other objects, such as strings and lists, for writing strings stored in a buffer.

WriteBuffer calls Write to handle the actual writing. If the stream fails to write all the requested bytes, an EWriteError exception is raised.

Delphi-Quellcode:
MemStream.WriteBuffer(Array[0],High(Array))
Grüße
Klaus

ElThoro 25. Feb 2009 12:15

Re: Array base64 codieren
 
Hallo nochmal!

Ich wollte nur kurz mitteilen, dass genau das mein Problem gelöst hat!
Vielen, vielen Dank dafür
sagt

ElThoro

Neutral General 25. Feb 2009 12:54

Re: Array base64 codieren
 
Hi Klaus,

Wenn du das Array in einen Stream speicherst, musst du bei der Größe schon Length(Array) angeben ;)
Das letzte Element wird sonst nicht gespeichert. Und man muss die Länge noch mit der Größe des jeweiligen Datentyps multiplizieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.

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