Das ist von Aison, hat er mir im IRC geschickt. Ist für Strings.
Code: Alles auswählen
function CompressString(const S: String; const Level: Integer): String;
var
Len: uLong;
res: cint;
begin
if Length(S) > 0 then
begin
Len := compressBound(Length(S));
SetLength(Result, Len+4);
res := compress2(@Result[5], @Len, @S[1], Length(S), Level);
if res <> Z_OK then
raise Exception.Create(zError(res));
SetLength(Result, Len+4);
PLongword(@Result[1])^ := Len;
end else
Result := '';
end;
function DecompressString(const S: String): String;
var
Len: uLong;
res: cint;
begin
if Length(S) > 4 then
begin
Len := PLongword(@S[1])^;
SetLength(Result, Len);
res := uncompress(@Result[1], @Len, @S[5], Length(S)-4);
if res <> Z_OK then
raise Exception.Create(zError(res));
end else
Result := '';
end;
Wenn ich das Wegbringen würde, bräuchte ich keinen Funktionen zum komprimieren und dekomprimieren von Buffern mehr.
Der "Buffer error" hat nichts mit meiner Frage, wie ich mit der ZLib Buffer komprimieren kann, zu tun.
mfg _X_
edit:// Titel geändert