zoukankan      html  css  js  c++  java
  • 压缩和解压缩OLEVARIANT

    uses ZLibEx

    procedure VariantToStream(const V: OLEVariant; Stream: TStream);
    var
      P : Pointer;
    begin
      Stream.Position := 0;
      Stream.Size := VarArrayHighBound (V, 1) - VarArrayLowBound (V, 1) + 1;
      P := VarArrayLock (V);
      Stream.Write (P^, Stream.Size);
      VarArrayUnlock (V);
      Stream.Position := 0;
    end;

    procedure StreamToVariant(Stream: TStream; var V: OLEVariant);
    var
      P : Pointer;
    begin
      V := VarArrayCreate ([0, Stream.Size - 1], varByte);
      P := VarArrayLock (V);
      Stream.Position := 0;
      Stream.Read (P^, Stream.Size);
      VarArrayUnlock (V);
    end;

    function CompressData(V: OleVariant): OleVariant;
    var
      M, M0: TMemoryStream;
    begin
      M := TMemoryStream.Create;
      M0 := TMemoryStream.Create;
      try
        if V = Null then exit;

        VariantToStream(V,M);       //转换到流
        M.Position := 0;
        ZCompressStream(M, M0);        //压缩流
        StreamToVariant(M0, V);      //转换到变体返回值
      finally
        M.Free;
        M0.Free
      end;
      Result := V;
    end;

    function DeCompressData(V: OleVariant): OleVariant;
    var
      M, M0: TMemoryStream;
    begin
      M := TMemoryStream.Create;
      M0 := TMemoryStream.Create;
      try
        if V = Null then exit;

        VariantToStream(V,M);       //转换到流
        M.Position := 0;
        ZDeCompressStream(M, M0);        //压缩流
        StreamToVariant(M0, V);      //转换到变体返回值
      finally
        M.Free;
        M0.Free
      end;
      Result := V;
    end;

  • 相关阅读:
    HDU-ACM“菜鸟先飞”冬训系列赛——第9场
    HDU3092:Least common multiple(素数筛选+完全背包)
    HDU1452:Happy 2004(积性函数)(因子和)
    HDU-ACM“菜鸟先飞”冬训系列赛——第8场(1004)
    Codeforces Round #395 (Div. 2)
    一些算法技巧整理(添加中)
    poj 1852 Ants
    hdu 1587 Flowers
    hdu 1563 Find your present!
    hdu 1570 AC
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940596.html
Copyright © 2011-2022 走看看