由于我的产品是gprs上网的,但是通讯的数据量似乎有一点大了,所以希望进行压缩之后再传送,结果在找个wince能用的压缩类还真难

其实其他的没什么,不过是个内存压缩而已,也不需要压缩包里面可以有文件,更不需要文件压缩,只要能压缩二进制文件就皆大欢喜了

找了几个,现在一个一个试呢



1说能用在wince里面的了,但是好像用起来烦了点
http://www.codeproject.com/file/zip_utils.asp

2还有一个是国产的,但是wince里面用不了,
http://www.vckbase.com/document/viewdoc/?id=1265
搞了很久,一直没有搞好,实在是没有办法了。问题很奇怪,一运行起来简直就是破坏了PDA,非要硬重启才可以,还是拿第一个做研究吧.

最后还是能用了,可以压缩解压了
 HZIP hz = CreateZip(m_pOut,200000,0);//压缩到内存
 //HZIP hz = CreateZip(L"simple1.zip",0);
int iLen=ZipAdd(hz,L"xml.txt",m_pChar,200000);//压缩文件


 void * m_ppChar;
 unsigned long m_iLen;
 ZipGetMemory(hz,&m_ppChar,&m_iLen);//可以取得压缩文件的大小

下面的代码是压缩了又解压缩,有点乱,

     char   *  m_pChar; // 等待压缩的
    m_pChar = new   char [ 200000 ];

    
char   *  m_pOut; // 压缩的
    m_pOut = new   char [ 200000 ];

    
char   *  m_pUnzip;
    m_pUnzip
= new   char [ 200000 ]; // 解压后的

    
    
for ( int  i = 0 ;i < 200000 ;i ++ ) {
        m_pChar[i]
=i;
    }


    HZIP hz 
=  CreateZip(m_pOut, 200000 , 0 );
//     HZIP hz = CreateZip(L"simple1.zip",0);
int  iLen = ZipAdd(hz,L " xml.txt " ,m_pChar, 200000 ); // 压缩


    
void   *  m_ppChar;
    unsigned 
long  m_iLen;
    ZipGetMemory(hz,
& m_ppChar, & m_iLen);

    HZIP hz1 
=  OpenZip(m_pOut, m_iLen,  0 );    

  ZIPENTRY ze; 
    i
= 0 ;
  FindZipItem(hz1,L
" xml.txt " , true , & i, & ze);
  
//  that lets us search for an item by filename.
  
//  Now we unzip it to a membuffer.

  UnzipItem(hz1,i, m_pUnzip, ze.unc_size);

  
if (memcmp(m_pChar,m_pUnzip, 200000 ) == 0 ) {
      AfxMessageBox(L
"相同");
  }
else {
      AfxMessageBox(L
"不相同");
  }

    
  CloseZip(hz);    
  CloseZip(hz1);
    
    
    delete m_pChar;
    delete m_pOut;
    delete m_pUnzip;

代码在这里