湛江廉江网站建设,星巴克seo网络推广,建网站用什么程序好,建设银行网站建设情况From: http://blog.csdn.net/turingo/article/details/8148264 zlib(http://zlib.net/)提供了简洁高效的In-Memory数据压缩和解压缩系列API函数#xff0c;很多应用都会用到这个库#xff0c;其中compress和uncompress函数是最基本也是最常用的。不过很奇怪的是#xff0c;…From: http://blog.csdn.net/turingo/article/details/8148264 zlib(http://zlib.net/)提供了简洁高效的In-Memory数据压缩和解压缩系列API函数很多应用都会用到这个库其中compress和uncompress函数是最基本也是最常用的。不过很奇怪的是compress和uncompress函数尽管已经非常的简单却仍然有不少人用得不好其实归根结底还是在于有些事情没有弄明白这里大家先看下面的代码。 [cpp] view plaincopy #include stdlib.h #include string.h #include stdio.h #include zlib.h int main(int argc, char* argv[]) { char text[] zlib compress and uncompress test\nturingo163.com\n2012-11-05\n; uLong tlen strlen(text) 1; /* 需要把字符串的结束符\0也一并处理 */ char* buf NULL; uLong blen; /* 计算缓冲区大小并为其分配内存 */ blen compressBound(tlen); /* 压缩后的长度是不会超过blen的 */ if((buf (char*)malloc(sizeof(char) * blen)) NULL) { printf(no enough memory!\n); return -1; } /* 压缩 */ if(compress(buf, blen, text, tlen) ! Z_OK) { printf(compress failed!\n); return -1; } /* 解压缩 */ if(uncompress(text, tlen, buf, blen) ! Z_OK) { printf(uncompress failed!\n); return -1; } /* 打印结果并释放内存 */ printf(%s, text); if(buf ! NULL) { free(buf); buf NULL; } return 0; } zlib处理的对象是Bytef*字节流很多人遇到字符串就会混淆了其实很简单字节流是没有结束符的需要配备长度信息所以处理字符串的时候需要把结束符也当成一个普通的字节这样计算长度的时候也需要算它一份。另外绝大部分人都想动态分配缓冲区也就是说需要多少再给多少其实zlib本身有提供compressBound函数用于计算压缩后缓冲区长度的上限值不需要额外再设计一些不适当的预测算法不过解压缩的时候没有提供长度的预测由于compress和uncompress一般都是成对使用的预先保存好原文的长度即可。