资源预览内容
第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
第9页 / 共15页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
/* Project description:* Lz77 compression/decompression algorithm.*/#include #include #include #include #define OFFSET_CODING_LENGTH (10)#define MAX WND SIZE1024/#define MAX WND SIZE#define OFFSET MASK CODE(13 ;ulOffsetInByte = ulBitOffset&7;*(pBuffer+ulByteBoundary) |= (13 ;ulOffsetInByte = ulBitOffset&7;*(pBuffer+ulByteBoundary) &= (13 ;ulOffsetInByte = ulBitOffset&7;return (*(PULONG)(pBuffer+ulByteBoundary)ulOffsetInByte)&1 ; ULONG WINAPIWriteGolombCode(ULONG x,PUCHAR pBuffer, ULONG ulBitOffset )ULONGq, r;inti;q = (x-1)m;r = x-(qm)-1;for(i=0; (ULONG)iq; i+, ulBitOffset+) Write1ToBitStream(pBuffer, ulBitOffset);Write0ToBitStream(pBuffer, ulBitOffset);ulBitOffset+;for(i=0; ii)&1 )Write1ToBitStream(pBuffer, ulBitOffset);elseWrite0ToBitStream(pBuffer, ulBitOffset);return m+q+1;ULONGReadGolombCode(PULONG pulCodingLength,PUCHAR pBuffer,ULONG ulBitOffset)ULONG q, r;ULONG bit;int i;for(q=0; ;q+)bit = (ULONG)ReadBitFromBitStream(pBuffer, ulBitOffset);ulBitOffset+;if( !bit )break;for(i=0, r=0; (ULONG)im; i+, ulBitOffset+) bit = (ULONG)ReadBitFromBitStream(pBuffer, ulBitOffset); bit = i;r |= bit;*pulCodingLength = m + q + 1;return r+(qm)+1;ULONGCompareStrings(PUCHAR string1,PUCHAR string2,ULONG length)ULONGi;PUCHARp1, p2;p1 = string1;p2 = string2;for(i=0; i0 )length = CompareStrings(pSrc, pString, ulMaxLength);if( length*pulSubstringLength )*pulSubstringLength = length;*pulSubstringOffset = offset;pSrc+;offset+;ulMaxLength-;/* voidFindLongestSubstring(PUCHAR pSourceString,PUCHAR pString,ULONG ulSourceStringLength,PULONG pulSubstringOffset,PULONG pulSubstringLength)PUCHAR pCurrentOffset;PUCHAR p1, p2;ULONG offset, length;pCurrentOffset = pSourceString;*pulSubstringOffset = offset = 0;*pulSubstringLength = length = 0;while( pCurrentOffsetpSourceString+ulSourceStringLength )p1 = pCurrentOffset;p2 = pString;if( *p1=*p2 )while( p1*pulSubstringLength )*pulSubstringLength = length;*pulSubstringOffset = (ULONG)pCurrentOffset - (ULONG)pSourceString;pCurrentOffset+;*/ voidWriteBits(PUCHAR pDataBuffer,ULONG ulOffsetToWrite,ULONG ulBits,ULONG ulBitLength)ULONG ulDwordsOffset;ULONG ulBitsOffset, ulBitsRemained;ulDwordsOffset = ulOffsetToWrite5;ulBitsOffset = ulOffsetToWrite&31;ulBitsRemained = 32 - ulBitsOffset;if( 0=ulBitsOffset )*(PULONG)pDataBuffer+ulDwordsOffset) = ulBits;else if( ulBitsRemained=ulBitLength )*(PULONG)pDataBuffer+ulDwordsOffset) |= (ulBitsulBitsOffset);else*(PULONG)pDataBuffer+ulDwordsOffset) |= (ulBitsulBitsRemained;voidReadBits(PUCHAR pDataBuffer,ULONG ulOffsetToRead,PULONG pulBits)ULONG ulDwordsOffset;ULONG ulBitsOffset, ulBitsLength;ulDwordsOffset = ulOffsetToRead5;ulBitsOffset = ulOffsetToRead&31;ulBitsLength = 32 - ulBitsOffset;*pulBits = *(PULONG)pDataBuffer+ulDwordsOffset);if( 0!=ulBitsOffset )(*pulBits) = ulBitsOffset;(*pulBits) |= (*(PULONG)pDataBuffer+ulDwordsOffset+1)ulBitsLength;voidlz77compress(PUCHAR pDataBuffer,ULONG ulDataLength,PUCHAR pOutputBuffer,PULONG pulNumberO
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号