c語言使用zlib實現文本字符的gzip壓縮與gzip解壓縮


網絡上找到的好多方法在解壓縮字符串的時候會丟失字符,這里是解決方法:

http://stackoverflow.com/questions/21186535/compressing-decompressing-char-array-using-zlib-some-characters-missing

基於此,筆者修改了一下,由於是初學者,只按照編譯器不報錯的原則修改了一下,能運行

打開vc++6.0新建控制台程序程序,配置好zdll.lib,把zlib1.dll放置到合適的位置

主程序main.cpp如下

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "zlib.h"

int main()
{
  const char *istream = "some foo漢字";
  uLong srcLen = strlen(istream)+1;      // +1 for the trailing `\0`
  uLong destLen = compressBound(srcLen); // this is how you should estimate size 
                                         // needed for the buffer
  unsigned char* ostream = (unsigned char*)malloc(destLen);
  int res = compress(ostream, &destLen, (const unsigned char *)istream, srcLen); 
  // destLen is now the size of actuall buffer needed for compression
  // you don't want to uncompress whole buffer later, just the used part
  if(res == Z_BUF_ERROR){
    printf("Buffer was too small!\n");
    return 1;
  }
  if(res ==  Z_MEM_ERROR){
    printf("Not enough memory for compression!\n");
    return 2;
  }

  unsigned char *i2stream = ostream;
  char* o2stream = (char *)malloc(srcLen);
  uLong destLen2 = destLen; //destLen is the actual size of the compressed buffer
  int des = uncompress((unsigned char *)o2stream, &srcLen, i2stream, destLen2);
  printf("%s\n", o2stream);
  return 0;
}

 附件下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM