Einzelnen Beitrag anzeigen

Aljoscha

Registriert seit: 30. Dez 2004
97 Beiträge
 
#8

Re: Stream in Hexcode umwandeln und zurück

  Alt 25. Aug 2009, 21:51
Also irgendwie komme ich nicht weiter...
Der Stream ist nach dem Codieren und Dekodieren mit den Funktionen der Base64.pas von Daniel Wischnewski 4 Bytes größer als vorher und die Datei entsprechend unbrauchbar.
Ich habe zu testzwecken den Windows-Taschenrechner calc.exe verwendet.
Größe vor dem Codieren: 114688 Byte, Größe nach dem Dekodieren: 114692 Byte.
Das Problem habe ich mit jeder Datei...

Delphi-Quellcode:
function MemoryStreamToStr(const MemoryStream: TMemoryStream): string;
var
  StringStream: TStringStream;
begin
  StringStream := TStringStream.Create('');
  try
    StringStream.CopyFrom(MemoryStream, MemoryStream.Size);
    Result := StringStream.DataString;
  finally
    StringStream.Free;
  end;
end;

procedure StringToStream(aStr : String; MemoryStream: TMemoryStream);
var
   aStrLen : Integer;
begin
  aStrLen:=Length(aStr);
  MemoryStream.WriteBuffer(aStrLen,SizeOf(Integer));
  MemoryStream.WriteBuffer(Pointer(aStr)^,aStrLen);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ms:TMemoryStream;
temp: AnsiString;
begin
//MemoryStream erstellen
ms:=TMemoryStream.Create;
ms.LoadFromFile('./calc.exe');

//Größe des Streams ausgeben
ShowMessage( IntToStr(ms.Size) );

//Stream in String speichern
temp:=MemoryStreamToStr(ms);

//Stream freigeben
ms.Free;

//String Codieren
temp:=Base64Encode(temp);

//Testweise String ausgeben
Memo1.Text:=temp;

//String Decodieren
temp:=Base64Decode(temp);

//MemoryStream erstellen
ms:=TMemoryStream.Create;

//String in Stream speichern
StringToStream(temp,ms);

//Ausgeben Streamgröße nach Codieren und Decodieren
ShowMessage( IntToStr(ms.Size) );

//Stream in Datei speichern
ms.SaveToFile('./calc2.exe');
end;
  Mit Zitat antworten Zitat