2012-04-20 34 views
1

你能告訴我我該怎麼做?有沒有可以爲我做這個的Freepascal單元?我需要這樣做,所以我的程序可以將二進制數據存儲在基於XML的文件格式中。如何將任何類型的文件編碼爲base64字符串,然後使用Lazarus/Delphi將其解碼爲文件?

+0

[binary-to-base64-delphi](http:// stackoverflow。 com/questions/5795263/binary-to-base64-delphi/5795440#5795440) – 2012-04-20 09:05:04

+0

@Uwe該單元是否可用於FPC? – 2012-04-20 10:27:07

+0

@David,因爲我沒有拉撒路我不知道。這就是爲什麼我寫了_possible_。 – 2012-04-20 12:10:52

回答

9

使用base64單位及其兩個等級TBase64EncodingStreamTBase64DecodingStream

這裏是一個simple example

program demo; 

uses Classes, base64; 

var 
    DecodedStream: TStringStream; 
    EncodedStream: TStringStream; 
    Encoder: TBase64EncodingStream; 
    Output: string; 
begin 
    DecodedStream := TStringStream.Create('Hello World!'); 
    EncodedStream := TStringStream.Create(''); 
    Encoder  := TBase64EncodingStream.Create(EncodedStream); 
    Encoder.CopyFrom(DecodedStream, DecodedStream.Size); 

    Output := EncodedStream.DataString; 
    { Outputs 'SGVsbG8gV29ybGQh' } 
    WriteLn(Output); 

    DecodedStream.Free; 
    EncodedStream.Free; 
    Encoder.Free; 
end. 

並且,在opposite direction

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. 

或速記encodestringbase64decodestringbase64(2.4.4+)用於非流基於使用:

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

它可以與TFileStream一起使用嗎? – 2012-04-20 09:06:03

+1

是的,它可以處理任何形式的流。這確實是使其基於流的點。 – 2012-04-20 09:44:06

+0

Btw從2.4.4開始,在該單元中還有一些簡單的幫助函數可以實現流封裝以方便使用。 – 2012-04-20 12:22:32

相關問題