不关心算法细节,直接用,拿来主义,我们可以直接使用zlib的压缩解压的接口的,但是为了使用我们自己的内存管理器,所以用自己的接口了。
voidpf myalloc(voidpf opaque,unsigned num, unsigned size)//内存分配
{
return (voidpf) mymemallocator(num*size);
}
void myfree(voidpf opaque, voidpf ptr)//内存回收
{
mymemfree(ptr);
}
int compress(Bytef* dest, uLongf *destLen, const Bytef *source, unsigned long sourceLen, int level)
{
z_stream stream;
int errno;
stream.next_in = (Bytef*)source;
stream.avail_in = (uInt)sourceLen;
stream.next_out = dest;
stream.avail_out = (uInt)*destLen;
if((uLong)stream.avail_out != *destLen || (uLong)stream.next_in != sourceLen)return Z_BUF_ERROR;
stream.zalloc = (alloc_func)myalloc;
stream.zfree =(free_func)myfree;
stream.opaque =(voidpf)0;
errno =deflateInit(&stream,level);
if(errno != Z_OK) return errno;
errno = deflate(&stream,Z_FINISH);
if(errno != Z_STREAM_END)
{
deflateEnd(&stream);
return errno = Z_OK?Z_BUF_ERROR:errno;
}
*destLen = stream.total_out;
errno = deflateEnd(&stream);
return errno;
}压缩使用deflate,解压就用inflate相关的函数就可以了。过几天我再把网络编程中常用的rc5,des,cast,ipp加密解密整理一下。
这些东西就是得经常用,经常看,要不然几天又给忘光了

本文介绍了一个基于zlib库的自定义压缩接口实现,包括内存分配与释放函数,以及如何使用deflate进行数据压缩。此外,还提到了计划整理网络编程中常见的加密解密算法。
1582

被折叠的 条评论
为什么被折叠?



