2011-10-31 45 views
3

我有一個包含PDF文件數據的64位編碼的字符串。將64位編碼的字符串轉換爲二進制文件

使用EncdDecd命名空間我可以將字符串解碼爲一個字節數組。

這是我有麻煩,我試圖保存的字符的字符串,但一旦它擊中一個空值(ASCII = 0)將字符串不再追加..


變種
EncodedString :String;
Report:String;
Base64Bytes:TBytes; //包含二進制數據

 
begin 
Base64Bytes := DecodeBase64(EncodedString); 
for I := 0 to Length(Base64Bytes) - 1 do 
    begin 
     Report := Report + Chr(Base64Bytes[I]); 
    end; 
end; 

寫入一個文本文件似乎更好地工作,但它重命名爲PDF後,它不能正常打開。

如何在delphi中寫入二進制文件? 甚至將數據保存到流?

基本上我只是想把編碼後的字符串保存到pdf文件中,或者在delphi中顯示pdf。

謝謝

p.s.

我環顧四周,找到了一個可能的解決方案 Saving a Base64 string to disk as a binary using Delphi 2007但有沒有另一種方法?

+2

重複的[使用Delphi 2007將Base64字符串保存爲磁盤作爲二進制文件](http://stackoverflow.com/questions/690475/saving-a-base64-string-to-disk-as-a-binary-採用德爾福-2007)。我在這裏看不到你要求的新*信息。如果你只是想要額外的選項,它們屬於原始問題的答案,而不是重複。 –

+0

你試過了什麼?問題是什麼?你如何「追加」字符串?請使用「EncdDecd命名空間」發佈您的代碼。另外,如何將文本文件更改爲pdf?再次發佈您的代碼。 Delphi中有很多方法來轉換一個字符串並將其保存爲二進制文件。你發佈的鏈接是相當緊湊的代碼。 –

回答

8

這應做到:

procedure DecodeBaseToFile(const FileName: string; 
    const EncodedString: AnsiString); 
var 
    bytes: TBytes; 
    Stream: TFileStream; 
begin 
    bytes := DecodeBase64(EncodedString); 
    Stream := TFileStream.Create(FileName, fmCreate); 
    try 
    if bytes<>nil then 
     Stream.WriteBuffer(bytes[0], Length(bytes)); 
    finally 
    Stream.Free; 
    end; 
end; 

注意:我只在我的腦海編譯此。

+1

很棒!謝謝!我會投它,但我不能:) – Trevor

+0

@Trevor:你也可以使用'TByteStream'。它是一個'TMemoryStream'後代,所以它有一個'SaveToFile()'方法可用。這樣,您不必手動實例化TFileStream。 –

+0

@Trevor:爲您提供優惠,但您必須自己接受(上/下箭頭下方的複選標記)。 –

相關問題