![]() |
Base64 to RawByteString
Hi zusammen,
ich habe im Moment in etwa folgende Funktion:
Delphi-Quellcode:
Das funktioniert wunderbar, aber der cast von "RawByteString(tempStream.DataString)"
class procedure TSuper_Api.DoDecode(
const sBase64Daten : String; var rawData : RawByteString ); var baseStream : TStringStream; // Base64-codiert tempStream : TStringStream; // Ergebnis begin SetLength(rawData, 0); // Nur zur Sicherheit tempStream := TStringStream.Create(); // Ergebnis try baseStream := TStringStream.Create(sBase64Daten); tempStream.Clear(); try TNetEncoding.Base64.Decode(baseStream, tempStream); rawData := RawByteString(tempStream.DataString); finally baseStream.Free(); end; finally tempStream.Free(); end; end; erscheint mir falsch. Ich habe zumindest das Gefühl, dass ich noch was "falsch" mache oder zumindestens "nicht schön". Die Lösung mit den StringStreams ist ja so wunderbar einfach und wie gesagt funktioniert das ja auch alles, aber es gibt dafür doch sicherlich einen "richtigeren" Weg!? Geht da was über den MemoryStream? Oder hat der StringStream Funktionen um die "Daten" als RawByteString abzugreifen, vielleicht über "tempStream.Bytes"? Ich hoffe ihr wisst, was ich meine! Liebe Grüße und danke schonmal für's lesen! Incocnito |
AW: Base64 to RawByteString
Und was machst du mit richtigen binären Daten, die als Base64 string reinkommen?
Bspw. eine Firmware, ein Bitmap/QR-Code und sonst was alles? Wenn du dir sicher bist, dass deine Base64-Daten eh alle eine textuelle Information enthalten, dann kannst du das auch abkürzen:
Delphi-Quellcode:
class procedure TSuper_Api.DoDecode(
const sBase64Daten : String; out rawData: RawByteString ); var DecodedBytes: TBytes; begin DecodedBytes := TNetEncoding.Base64.DecodeStringToBytes(sBase64Daten); if ImVerySureItIsJustStringData then begin rawData := RawByteString(TEncoding.UTF8.GetString(DecodedBytes)); end; end; |
AW: Base64 to RawByteString
Hi TiGu,
ich bin mir nicht 100%ig sicher, was da an Daten kommt, aber ein Teil davon ist "als Text lesbar", falls du das meinst. Beispielsweise "§~~00020‚Hallo Welt&}}!", wobei er hier die Byte-Codes, die ich hier reinkopiert habe auch schon wieder rauswirft. In "Wirklichkeit" sind das dann Byte-Codes, die für andere Informationen stehen. Meiner Meinung nach macht das noch keinen Delphi-UCSString (?), da die Daten an sich nur im Text-Anteil als ASCII (oder ANSI?, ich bin mir da nie so sicher) kodiert sind. Der Rest sind Byte-Codes für irgendwelche Stati. Ich bin also näher am Bitmap/Firmware-Code/... als am Text. (Man kann ja auch den Inhalt einer EXE-Datei in einen String laden, aber das will doch keiner!) Hoffendlich ist nun etwas klarer, worum es geht. Auf Informationen bezüglich der Daten würde ich auch gerne verzichten und das Problem so allgemein wie möglich halten. MfG Incocnito |
AW: Base64 to RawByteString
Es wäre dann sinnvoller nach TBytes oder einen Stream zu dekodieren und dann innerhalb des (bekannten?) Binärformates nach den Strings zu suchen, insofern du die wirklich brauchst.
Irgendwelche Binärdaten hart in einen String (sei es nun Unicode- oder dieser spezielle Ansistring=RawByteString) zu casten ist fehleranfällig, um sich zu sagen geradezu falsch. |
AW: Base64 to RawByteString
Ich meine auch, dass wenn überhaupt dann "TStringStream.Bytes" (oder meinetwegen TMemoryStream.Bytes)
der richtige Ansatz wäre. Also TBytes, wie du ja auch schon sagst. Ich denke, dass das RawByteString noch aus den Pascal-Zeiten kommt. Und den sonst funktionierenden Quelltext der mit RawByteString arbeitet fasse ich sicher nicht an. Dann lasse ich das lieber so häßlich mit dem Typecast von String auf RawByteString. 🤯 MfG Incocnito |
AW: Base64 to RawByteString
In der mORMot Unit
![]()
Bis bald... Thomas |
AW: Base64 to RawByteString
Das ist ja mal ein nettes Nachschlagewerk.
Probiere ich morgen dann aus! Danke erstmal! 👌 MfG Icocnito |
AW: Base64 to RawByteString
Zitat:
Zitat:
|
AW: Base64 to RawByteString
Zitat:
Da man in den mobilen Plattformen krankhaft die ANSI-Strings versteckt hat, wäre es eh intelligenter das garnicht erst zu verwenden. TBytes für Binärdaten ist doch ein netter Typ? Und TFile, TEncoding, sowie TNetEncoding.Base64.DecodeStringToBytes verstehen den auch. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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