如何将任何类型的文件编码为base64字符串,然后使用Lazarus/Delphi再次将其解码为文件?

如何将任何类型的文件编码为base64字符串,然后使用Lazarus/Delphi再次将其解码为文件?,delphi,serialization,base64,freepascal,lazarus,Delphi,Serialization,Base64,Freepascal,Lazarus,你能告诉我怎么做吗?有没有任何Freepascal装置可以帮我做这件事?我需要它,以便我的程序能够以基于XML的文件格式存储二进制数据。使用该单元及其两个类,TBASE64编码流和TBASE64解码流 以下是一份: 在下列情况下: 或简写和(2.4.4+)对于非基于流的使用: Uses Base64; var s : AnsiString; Begin s:=EncodeStringBase64('Hello world!'); Writeln('Encoded : ',s);

你能告诉我怎么做吗?有没有任何Freepascal装置可以帮我做这件事?我需要它,以便我的程序能够以基于XML的文件格式存储二进制数据。

使用该单元及其两个类,
TBASE64编码流
TBASE64解码流

以下是一份:

在下列情况下:

或简写和(2.4.4+)对于非基于流的使用:

Uses Base64;
var 
   s : AnsiString;
Begin
  s:=EncodeStringBase64('Hello world!');
  Writeln('Encoded : ',s);
  s:=DecodeStringBase64(s);
  Writeln('Decoded again : ',s);    
end.

“Uwe的复制品在FPC里有吗?”大卫,因为我没有拉扎勒斯,我不知道。这就是我写“可能”的原因。是的,它可以处理任何形式的流。这就是使它基于流的真正意义所在。顺便说一句,从2.4.4开始,该单元中还有两个简单的帮助函数,用于流包装,以便于使用。@marco谢谢。我认为如果你这么好的话,这是值得一个回答的。一个极好且清晰的回答!我试图自己找到这些信息,却偶然发现了这一点。感谢您也包括了非流方法,因为这是我需要使用的。
program demo;

uses Classes, base64;

var
  DecodedStream: TStringStream;
  EncodedStream: TStringStream;
  Decoder: TBase64DecodingStream;
  Output: string;
begin
  EncodedStream := TStringStream.Create('SGVsbG8gV29ybGQh');
  DecodedStream := TStringStream.Create('');
  Decoder       := TBase64DecodingStream.Create(EncodedStream);
  DecodedStream.CopyFrom(Decoder, Decoder.Size);

  Output := DecodedStream.DataString;
  { Outputs 'Hello World!' }
  WriteLn(Output);

  DecodedStream.Free;
  EncodedStream.Free;
  Decoder.Free;
end.
Uses Base64;
var 
   s : AnsiString;
Begin
  s:=EncodeStringBase64('Hello world!');
  Writeln('Encoded : ',s);
  s:=DecodeStringBase64(s);
  Writeln('Decoded again : ',s);    
end.