c语言压缩文档,LZ压缩算法(C语言版).doc

LZ77压缩算法(C语言版)

测试压缩一个425K的文件需要9.4秒,压缩后的文件为177K。

/*********************************************************************

*

* Project description:

* Lz77 compression/decompression algorithm.

*

*********************************************************************/

#include

#include

#include

#include

#define OFFSET_CODING_LENGTH (10)

#define MAX_WND_SIZE 1024

//#define MAX_WND_SIZE (1<

#define OFFSET_MASK_CODE (MAX_WND_SIZE-1)

const ULONG m=3;

UCHAR __buffer1__[0x200000];

UCHAR __buffer2__[0x200000];

void

Write1ToBitStream(

PUCHAR pBuffer,

ULONG ulBitOffset

)

{

ULONG ulByteBoundary;

ULONG ulOffsetInByte;

ulByteBoundary = ulBitOffset>>3 ;

ulOffsetInByte = ulBitOffset&7;

*(pBuffer+ulByteBoundary) |= (1<

}

void

Write0ToBitStream(

PUCHAR pBuffer,

ULONG ulBitOffset

)

{

ULONG ulByteBoundary;

ULONG ulOffsetInByte;

ulByteBoundary = ulBitOffset>>3 ;

ulOffsetInByte = ulBitOffset&7;

*(pBuffer+ulByteBoundary) &= (~(1<

}

ULONG

ReadBitFromBitStream(

PUCHAR pBuffer,

ULONG ulBitOffset

)

{

ULONG ulByteBoundary;

ULONG ulOffsetInByte;

ulByteBoundary = ulBitOffset>>3 ;

ulOffsetInByte = ulBitOffset&7;

return ((*(PULONG)(pBuffer+ulByteBoundary))>>ulOffsetInByte)&1 ;

}

ULONG WINAPI

WriteGolombCode(

ULONG x,

PUCHAR pBuffer,

ULONG ulBitOffset

)

{

ULONG q, r;

int i;

q = (x-1)>>m;

r = x-(q<

for(i=0; (ULONG)i

{

Write1ToBitStream(pBuffer, ulBitOffset);

}

Write0ToBitStream(pBuffer, ulBitOffset);

ulBitOffset++;

for(i=0; i

{

if( (r>>i)&1 )

{

Write1ToBitStream(pBuffer, ulBitOffset);

}

else

{

Write0ToBitS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值