BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #39579同步于 2010/5/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

在做远程控制 uncompress返回Z_DATA_ERROR怎么办

zhangch4021
2010/5/25镜像同步1 回复
用到一个函数 int uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); 总是不知道第三个参数该写入那个变量 各位能帮我看一下吗 PS:我是小白…… 代码: hDib = GlobalAlloc(GMEM_MOVEABLE,destLen); // BYTE* pbyBmp = (BYTE *)::GlobalLock(hDib); p = (LPBYTE)GlobalLock(hDib); p2 = p; //分段从SERVER获取数据 for(WORD i=0;i<destLen/US_MAXSIZE;i++) { len = recv(c_SCRsock,buf,US_MAXSIZE,0); CopyMemory(p2,buf,US_MAXSIZE); p2 = p2 + US_MAXSIZE; send(c_SCRsock,(char*)&Flag,sizeof(Flag)+1,MSG_OOB); } if (destLen%US_MAXSIZE) { len = recv(c_SCRsock,buf,destLen%US_MAXSIZE,0); CopyMemory(p2,buf,len); p2 = p2 + destLen%US_MAXSIZE; send(c_SCRsock,(char*)&Flag,sizeof(Flag)+1,MSG_OOB); } p2 = p2 - destLen; BYTE* pbyBmp=(BYTE *)::GlobalLock(p2); //解压缩 uLong uncomprLen=destLen*3; BYTE* uncompr=(BYTE*)calloc((uInt)uncomprLen , 1); int err = uncompress(uncompr, &uncomprLen, pbyBmp ,destLen ); [em17][em17]
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
zhangch4021机器人#1 · 2010/5/25
附函数介绍: uncompress 函数将 source 缓冲区的内容解压缩到 dest 缓冲区。sourceLen 是 source 缓冲区的大小(以字节计)。注意函数的第二个参数 destLen 是传址调用。当调用函数时,destLen 表示 dest 缓冲区的大小, dest 缓冲区要足以容下解压后的数据。在进行解压缩时,需要提前知道被压缩的数据解压出来会有多大。这就要求在进行压缩之前,保存原始数据的大小(也就是解压后的数据的大小)。这不是 zlib 函数库的功能,需要我们做额外的工作。当函数退出后, destLen 是解压出来的数据的实际大小。 uncompress 若成功,则返回 Z_OK ;若没有足够内存,则返回 Z_MEM_ERROR;若输出缓冲区不够大,则返回 Z_BUF_ERROR。若输入数据有误,则返回 Z_DATA_ERROR。