| lzw压缩算法的c语言实现 |
|
|
|
|
| 来源: 作者: 添加日期:2006-7-17 6:53:04 点击次数: |
|
} code = lzw->lp_code[ hash ]; } return code; } //------------------------------------------------------------------------------ VOID insert_table( PLZW_DATA lzw ) {
WORD hash; hash = get_hash_index( lzw ); if( lzw->lp_code[ hash ] == 0xFFFF ) { lzw->lp_prefix[ hash ] = lzw->prefix; lzw->lp_suffix[ hash ] = lzw->suffix; lzw->lp_code[ hash ] = lzw->code; } else { while( lzw->lp_code[ hash ] != 0xFFFF ) { hash = re_hash_index( hash ); } lzw->lp_prefix[ hash ] = lzw->prefix; lzw->lp_suffix[ hash ] = lzw->suffix; lzw->lp_code[ hash ] = lzw->code; }
} //------------------------------------------------------------------------------
#endif
(4) encode.h 压缩程序主函数
#ifndef __ENCODE_H__ #define __ENCODE_H__ //------------------------------------------------------------------------------ #include <stdio.h> #include <stdlib.h> #include <windows.h>
//------------------------------------------------------------------------------ VOID output_code( DWORD code ,PBUFFER_DATA out, PLZW_DATA lzw) { out->dw_buffer |= code << ( 32 - out->by_left - lzw->cur_code_len ); out->by_left += lzw->cur_code_len;
while( out->by_left >= 8 ) { if( out->index == BUFFERSIZE ) { empty_buffer( lzw,out); }
out->lp_buffer[ out->index++ ] = (BYTE)( out->dw_buffer >> 24 ); out->dw_buffer <<= 8; out->by_left -= 8; } } //------------------------------------------------------------------------------ VOID do_encode( PBUFFER_DATA in, PBUFFER_DATA out, PLZW_DATA lzw) { WORD prefix; while( in->index != in->top ) |
|
| |