16,472
社区成员
发帖
与我相关
我的任务
分享
LogDll("1111");
// LogDll("compressSize",pHeader->compressSize);
// LogDll("uncompressSize",pHeader->uncompressSize);
unsigned char* src=new unsigned char[pHeader->compressSize];
unsigned char* dst=new unsigned char[pHeader->uncompressSize];
fread(src,1,pHeader->compressSize,fr);
unsigned long dstLen;
uncompressRaw(dst,&dstLen,src,pHeader->compressSize);
LogDll("dstLen",dstLen);
fwrite(dst,1,pHeader->uncompressSize,fw);
int uncompressRaw(Bytef *dest,uLongf* destLen, const Bytef* source,uLong sourceLen)
{
z_stream stream;
int err;
stream.next_in = (Bytef*)source;
stream.avail_in = (uInt)sourceLen;
// Check for source > 64K on 16-bit machine:
if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
stream.next_out = dest;
stream.avail_out = (uInt)*destLen;
if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
err = inflateInit2(&stream,-9);
if (err != Z_OK) return err;
err = inflate(&stream, Z_FINISH);
if (err != Z_STREAM_END) {
inflateEnd(&stream);
if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
return Z_DATA_ERROR;
return err;
}
*destLen = stream.total_out;
err = inflateEnd(&stream);
return err;
}