LSZZ解压不成功,是什么原因?
时间:2011-09-22
来源:互联网
C/C++ code
//--------------------------------------------------------------------------- bool unpack_data(const byte *CompressedBuffer, int PackedSize, byte *DeCompressedBuffer, int DecompressedBufferSize) { const byte *CompressedPtr; byte *DecompressedPtr; size_t offset; int tmp, count; unsigned ReadChecksum, CalculatedChecksum; int rpos, rlen; int chunk, size; unsigned char FlagByte; byte b1, b2; if ( (PackedSize-=4)<=0) return false; // no room for checksum size = 0; DecompressedPtr =DeCompressedBuffer; /* Each data block is preceded by a byte telling us what to do with * the next 8 bytes. */ for (offset=0;offset < PackedSize; ) { FlagByte = CompressedBuffer[offset++];// grab the encoding byte for (count = tmp=1;tmp < 256 && offset < PackedSize ; tmp*=2, count++) { CompressedPtr = &CompressedBuffer[offset]; size = DecompressedPtr - DeCompressedBuffer; if (FlagByte & tmp) /* Append the byte to output */ { *DecompressedPtr++ = *CompressedPtr; offset++; } else { /* Read a pointer */ b1 = *CompressedPtr; b2 = *(CompressedPtr + 1); offset += 2; rpos = size - b1 - 256 * ( b2/16 ); rlen = b2 - 16 * (b2 / 16) + 3; if ((rpos + rlen) < 0) { size+=rlen; while (rlen--) *DecompressedPtr++ = ' '; } else if ((DeCompressedBuffer + rpos) > DecompressedPtr) return false;//PBO_STS_OUT_OF_BOUNDS; /* PAD the file with a block from another place in the file */ else if ((rpos + rlen) <= size) { while (rpos < 0) { *DecompressedPtr++ = ' '; rlen--; rpos++; } memcpy(DecompressedPtr, &DeCompressedBuffer[rpos], rlen); DecompressedPtr += rlen; size += rlen; } /* PAD the file with the block until size is rpos + rlen */ else if ((rpos + rlen) > size) { chunk = size - rpos; while (rlen > 0) { if (chunk > rlen) chunk = rlen; if (!chunk) return false;//PBO_STS_CHUNK_ZERO; 就是这里不成功了,这是什么? memcpy(DecompressedPtr, &DeCompressedBuffer[rpos], chunk); DecompressedPtr += chunk; size += chunk; rlen -= chunk; } } } }//while temp }//while offset /* Last 4 bytes of the packed data is the checksum, unsigned int */ memcpy(&ReadChecksum, &CompressedBuffer[PackedSize], sizeof(ReadChecksum)); for (CalculatedChecksum = 0,DecompressedPtr = DeCompressedBuffer ; DecompressedPtr < &DeCompressedBuffer[DecompressedBufferSize] ; ) CalculatedChecksum += *DecompressedPtr++; if (ReadChecksum != CalculatedChecksum) return false;//PBO_STS_CHECKSUM; return true; //PBO_STS_NO_ERROR; } //---------------------------------------------------------------------------
作者: cankoo 发布时间: 2011-09-22
C/C++ code
谁回一下,把分给谁
if ((rpos + rlen) > size) { chunk = size - rpos; while (rlen > 0) { if (chunk > rlen) chunk = rlen; if (!chunk) return false;//PBO_STS_CHUNK_ZERO; 就是这里不成功了,这是什么? memcpy(DecompressedPtr, &DeCompressedBuffer[rpos], chunk); DecompressedPtr += chunk; size += chunk; rlen -= chunk; }
谁回一下,把分给谁
作者: cankoo 发布时间: 2011-09-24
PBO_STS_CHUNK_ZERO应该是lz在前面定义的一个宏
作者: Jake443403168 发布时间: 2011-09-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28