zoukankan      html  css  js  c++  java
  • 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 ``
      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!
    ");
        return 1;
      }
      if(res ==  Z_MEM_ERROR){
        printf("Not enough memory for compression!
    ");
        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
    ", o2stream);
      return 0;
    }

     附件下载

  • 相关阅读:
    DS博客作业02--栈和队列
    DS博客作业03--树
    C博客作业05--指针
    C语言博客作业04--数组
    C博客作业03--函数
    C博客作业02--循环结构
    C博客作业01--分支、顺序结构
    我的第一篇博客作业
    java购物车案例
    第三周-自主学习任务-面向对象基础与类的识别
  • 原文地址:https://www.cnblogs.com/passedbylove/p/4547029.html
Copyright © 2011-2022 走看看