不关心算法细节,直接用,拿来主义,我们可以直接使用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加密解密整理一下。这些东西就是得经常用,经常看,要不然几天又给忘光了