亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lzw壓縮算法.cpp

?? LZW壓縮算法,提供了LZW壓縮算法詳細代碼和說明
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//LZW壓縮算法的C語言源代碼
//1 程序由五個模塊組成。

//(1)  lzw.h      定義了一些基本的數據結構,常量,還有變量的初始化等。
//--------------------------------------------------------
//
//
//        版權所有:lam_lam studio
//        version 1.0
//
//--------------------------------------------------------
#ifndef __LZW_H__
#define __LZW_H__
//------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <memory.h>
//------------------------------------------------------------------------------
#define LZW_BASE    0x102//  The code base
#define CODE_LEN       12   //  Max code length
#define TABLE_LEN      4099 // It must be prime number and bigger than 2^CODE_LEN=4096. 
       // Such as 5051 is also ok.
#define BUFFERSIZE     1024
//------------------------------------------------------------------------------
typedef struct
{
    HANDLE      h_sour;  // Source file handle.
    HANDLE      h_dest;  // Destination file handle.
    
    HANDLE      h_suffix; // Suffix table handle.
    HANDLE      h_prefix; // Prefix table handle.
    HANDLE      h_code;  // Code table handle.
    
    LPWORD      lp_prefix; // Prefix table head pointer.
    LPBYTE      lp_suffix; // Suffix table head pointer.
    LPWORD      lp_code; // Code table head pointer.

    WORD        code;
    WORD        prefix;
    BYTE        suffix;

    BYTE        cur_code_len; // Current code length.[ used in Dynamic-Code-Length mode ]

}LZW_DATA,*PLZW_DATA;


typedef struct
{
    WORD        top;
    WORD        index;

    LPBYTE      lp_buffer;
    HANDLE      h_buffer;
    
    BYTE        by_left;
    DWORD       dw_buffer;

    BOOL        end_flag;

}BUFFER_DATA,*PBUFFER_DATA;


typedef struct                  //Stack used in decode
{
WORD        index;
HANDLE      h_stack;
LPBYTE      lp_stack;

}STACK_DATA,*PSTACK_DATA;
//------------------------------------------------------------------------------
VOID stack_create( PSTACK_DATA stack )
{
stack->h_stack  = GlobalAlloc( GHND , TABLE_LEN*sizeof(BYTE) );
stack->lp_stack = GlobalLock( stack->h_stack );
stack->index = 0;
}
//------------------------------------------------------------------------------
VOID stack_destory( PSTACK_DATA stack )
{
GlobalUnlock( stack->h_stack );
    GlobalFree  ( stack->h_stack );
}
//------------------------------------------------------------------------------
VOID buffer_create( PBUFFER_DATA    buffer )
{
    buffer->h_buffer   = GlobalAlloc(  GHND,  BUFFERSIZE*sizeof(BYTE)  );
    buffer->lp_buffer  = GlobalLock( buffer->h_buffer );
    buffer->top        = 0;
    buffer->index      = 0;
    buffer->by_left    = 0;
    buffer->dw_buffer  = 0;
    buffer->end_flag   = FALSE;
}
//------------------------------------------------------------------------------
VOID buffer_destory( PBUFFER_DATA   buffer )
{
    GlobalUnlock( buffer->h_buffer );
    GlobalFree  ( buffer->h_buffer );
}
//------------------------------------------------------------------------------
VOID re_init_lzw( PLZW_DATA lzw )    //When code table reached its top it should
{                                    //be reinitialized.      
    memset( lzw->lp_code, 0xFFFF, TABLE_LEN*sizeof(WORD) );
    lzw->code          = LZW_BASE;
    lzw->cur_code_len  = 9;
}
//------------------------------------------------------------------------------
VOID lzw_create(PLZW_DATA    lzw,    HANDLE h_sour,    HANDLE h_dest)
{
WORD i;
    lzw->h_code        = GlobalAlloc( GHND, TABLE_LEN*sizeof(WORD) );
    lzw->h_prefix      = GlobalAlloc( GHND, TABLE_LEN*sizeof(WORD) );
    lzw->h_suffix      = GlobalAlloc( GHND, TABLE_LEN*sizeof(BYTE) );
    lzw->lp_code       = GlobalLock( lzw->h_code   );
    lzw->lp_prefix     = GlobalLock( lzw->h_prefix );
    lzw->lp_suffix     = GlobalLock( lzw->h_suffix );
    lzw->code          = LZW_BASE;
    lzw->cur_code_len  = 9;
    lzw->h_sour        = h_sour;
    lzw->h_dest        = h_dest;
    memset( lzw->lp_code, 0xFFFF, TABLE_LEN*sizeof(WORD) );

}
//------------------------------------------------------------------------------
VOID lzw_destory(PLZW_DATA    lzw)
{  
    GlobalUnlock( lzw->h_code   );
    GlobalUnlock( lzw->h_prefix );
    GlobalUnlock( lzw->h_suffix );

GlobalFree( lzw->h_code  );
    GlobalFree( lzw->h_prefix );
    GlobalFree( lzw->h_suffix );    
}
//------------------------------------------------------------------------------
#endif

//(2) fileio.h   定義了一些文件操作

#ifndef __FILEIO_H__
#define __FILEIO_H__
//------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
//------------------------------------------------------------------------------
HANDLE  file_handle(CHAR* file_name)
{
    HANDLE h_file;
    h_file = CreateFile(file_name,
                       GENERIC_READ|GENERIC_WRITE,
                       FILE_SHARE_READ|FILE_SHARE_WRITE,
                       NULL,
                       OPEN_ALWAYS,
                       0,
                       NULL
                       );
    return h_file;
}
//------------------------------------------------------------------------------
WORD load_buffer(HANDLE h_sour, PBUFFER_DATA buffer)  // Load file to buffer
{
    DWORD ret;
    ReadFile(h_sour,buffer->lp_buffer,BUFFERSIZE,&ret,NULL);
    buffer->index = 0;
    buffer->top = (WORD)ret;
    return (WORD)ret;
}
//------------------------------------------------------------------------------
WORD empty_buffer( PLZW_DATA lzw, PBUFFER_DATA buffer)// Output buffer to file
{
   
    DWORD ret;
    if(buffer->end_flag) // The flag mark the end of decode
{
  if( buffer->by_left )
  {
   buffer->lp_buffer[ buffer->index++ ] = (BYTE)( buffer->dw_buffer >> 32-buffer->by_left )<<(8-buffer->by_left);
  }
}
WriteFile(lzw->h_dest, buffer->lp_buffer,buffer->index,&ret,NULL);
    buffer->index = 0;
    buffer->top = ret;
    return (WORD)ret;
}
//------------------------------------------------------------------------------
#endif

//(3) hash.h  定義了壓縮時所用的碼表操作函數,為了快速查找使用了hash算法,還有處理hash沖突的函數

#ifndef __HASH_H__
#define __HASH_H__
//------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
//------------------------------------------------------------------------------
#define   DIV       TABLE_LEN
#define   HASHSTEP  13         // It should bigger than 0.
//------------------------------------------------------------------------------
WORD get_hash_index( PLZW_DATA lzw )
{
    DWORD tmp;
    WORD result;
    DWORD prefix;
    DWORD suffix;
    prefix = lzw->prefix;
    suffix = lzw->suffix;
    tmp = prefix<<8 | suffix;
    result = tmp % DIV;
    return result;
}
//------------------------------------------------------------------------------
WORD re_hash_index( WORD hash ) // If hash conflict occured we must recalculate
{                               // hash index .
    WORD result;
    result = hash + HASHSTEP;
    result = result % DIV;
    return result;
}
//------------------------------------------------------------------------------
BOOL in_table( PLZW_DATA lzw ) // To find whether current code is already in table.
{
    BOOL result;
    WORD hash;

    hash = get_hash_index( lzw );
    if( lzw->lp_code[ hash ] == 0xFFFF )
    {
        result = FALSE;    
    }
    else
    {
        if( lzw->lp_prefix[ hash ] == lzw->prefix &&
            lzw->lp_suffix[ hash ] == lzw->suffix )
        {
            result = TRUE;
        }
        else
        {
            result = FALSE;
            while( lzw->lp_code[ hash ] != 0xFFFF )
            {
                if( lzw->lp_prefix[ hash ] == lzw->prefix &&
                    lzw->lp_suffix[ hash ] == lzw->suffix )
                {
                        result = TRUE;
                        break;    
                }
                hash = re_hash_index( hash );
            }
        }
    }
    return result;
}
//------------------------------------------------------------------------------
WORD get_code( PLZW_DATA lzw )
{
    WORD hash;
    WORD code;
    hash = get_hash_index( lzw );
    if( lzw->lp_prefix[ hash ] == lzw->prefix &&
        lzw->lp_suffix[ hash ] == lzw->suffix )
    {
        code = lzw->lp_code[ hash ];
    }
    else
    {
        while( lzw->lp_prefix[ hash ] != lzw->prefix ||
               lzw->lp_suffix[ hash ] != lzw->suffix )
        {
                hash = re_hash_index( hash );    
        }
        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>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品写真在线观看 | 欧美在线制服丝袜| 中文字幕一区二区三区蜜月| 成人性视频网站| 国产精品第一页第二页第三页| 成人动漫中文字幕| 一区二区三区精品久久久| 欧美私模裸体表演在线观看| 免费精品视频在线| 国产校园另类小说区| 91在线观看下载| 亚洲午夜在线电影| 精品日韩99亚洲| 成人v精品蜜桃久久一区| 亚洲精品视频免费观看| 91麻豆精品国产91久久久资源速度| 久久99九九99精品| 中文字幕亚洲视频| 欧美精品免费视频| 国产a级毛片一区| 亚洲一二三四区不卡| www欧美成人18+| 91天堂素人约啪| 免费人成黄页网站在线一区二区| 久久久久高清精品| 91国产福利在线| 国产精品资源在线看| 亚洲欧美视频在线观看视频| 欧美一卡二卡在线观看| 99国产精品久久久久久久久久久| 日韩中文字幕亚洲一区二区va在线 | 一区二区三区四区高清精品免费观看| 欧美日韩www| 成人免费黄色大片| 日韩va亚洲va欧美va久久| 中文字幕精品综合| 538在线一区二区精品国产| 成人黄色a**站在线观看| 美女尤物国产一区| 亚洲精品免费在线观看| 久久免费的精品国产v∧| 欧美怡红院视频| 成人精品免费看| 久久超碰97中文字幕| 亚洲国产精品尤物yw在线观看| 国产亚洲综合性久久久影院| 欧美日韩一区小说| heyzo一本久久综合| 精品一区二区三区在线播放视频| 樱花草国产18久久久久| 国产精品亲子伦对白| 亚洲精品在线电影| 欧美日韩久久久久久| 99久久精品免费看国产免费软件| 国产一区二区美女诱惑| 久久精品国产在热久久| 婷婷综合另类小说色区| 一区二区三区中文在线| 一区在线中文字幕| 国产精品嫩草影院com| 久久久久久免费网| 久久这里只有精品视频网| 欧美一区二区三区免费视频| 欧美日韩高清在线| 欧美性猛交一区二区三区精品| 99久久er热在这里只有精品66| 国产精品99久久久久久有的能看 | 亚洲影院理伦片| 日韩毛片一二三区| 亚洲美女在线一区| 亚洲欧美日韩国产手机在线| 国产精品麻豆网站| 中文字幕一区免费在线观看| 国产三级精品视频| 中文字幕欧美日本乱码一线二线 | 色综合中文字幕| av一区二区三区四区| 波多野结衣中文字幕一区二区三区| 国产一区二区在线看| 寂寞少妇一区二区三区| 国产一区视频网站| 丁香激情综合国产| 99久久国产综合精品麻豆| 色视频成人在线观看免| 在线视频中文字幕一区二区| 精品视频在线免费| 欧美电影在哪看比较好| 日韩欧美亚洲另类制服综合在线| 欧美一级久久久久久久大片| 精品欧美一区二区三区精品久久| 欧美大胆人体bbbb| 国产亚洲人成网站| 椎名由奈av一区二区三区| 亚洲一区二区三区中文字幕| 丝袜亚洲另类丝袜在线| 极品少妇xxxx精品少妇偷拍| 大白屁股一区二区视频| 欧美视频中文字幕| 精品奇米国产一区二区三区| 中文字幕一区二区三区在线播放| 一区二区三区不卡在线观看 | 91精彩视频在线观看| 5月丁香婷婷综合| 欧美激情一区二区三区全黄| 亚洲黄色免费电影| 蜜臀av在线播放一区二区三区| 国产成人精品影院| 色94色欧美sute亚洲线路一久| 91精品国产综合久久久久久| 日本一区二区三区在线观看| 一区二区欧美国产| 国产一区二区三区四区五区美女 | 精品国产3级a| 日韩美女视频19| 欧美aa在线视频| 99久久国产免费看| 日韩美女一区二区三区四区| 1024精品合集| 久久成人18免费观看| 色综合久久久久综合99| 精品电影一区二区三区| 亚洲女厕所小便bbb| 国产在线看一区| 欧美在线free| 欧美国产成人在线| 日本特黄久久久高潮| www.激情成人| 精品噜噜噜噜久久久久久久久试看 | 国产一区美女在线| 欧美日韩另类国产亚洲欧美一级| 国产蜜臀av在线一区二区三区| 日韩国产欧美在线播放| 91片黄在线观看| 久久精品日韩一区二区三区| 日本亚洲三级在线| 在线看国产一区二区| 国产日韩欧美精品综合| 日本aⅴ免费视频一区二区三区| 不卡影院免费观看| 久久综合九色综合97婷婷| 亚洲成人av免费| 色婷婷精品大视频在线蜜桃视频| 日韩精品一区二区三区老鸭窝| 亚洲自拍偷拍综合| 99久久综合精品| 国产午夜精品久久| 国产一区久久久| 精品国产乱码久久久久久图片| 午夜精品久久久久久久久久| 色婷婷综合久久久久中文 | 欧美亚洲日本国产| 日韩美女视频一区二区| 国产成人亚洲综合a∨猫咪| 精品少妇一区二区三区视频免付费| 亚洲成人在线观看视频| 色94色欧美sute亚洲线路一ni| 国产精品久久久久久久岛一牛影视 | 午夜成人在线视频| 91成人免费电影| 一区二区三区精品在线观看| 色婷婷亚洲精品| 亚洲日本va午夜在线影院| 成人激情视频网站| 国产精品午夜电影| 成人午夜私人影院| 中文字幕中文乱码欧美一区二区 | 久久综合给合久久狠狠狠97色69| 美日韩一区二区| 日韩精品中文字幕在线不卡尤物| 日韩不卡免费视频| 精品日韩99亚洲| 国产成人自拍高清视频在线免费播放| 精品99一区二区三区| 国产高清精品在线| 欧美国产一区在线| 99国产精品久久久久久久久久久 | 欧美一区二区三区视频免费播放 | 成人黄色在线视频| 国产精品国产三级国产三级人妇| www.亚洲色图| 一区二区三区高清| 欧美一区二区在线免费播放| 久久99国产精品久久99 | 91麻豆产精品久久久久久| 亚洲精品成人少妇| 欧美日韩一区不卡| 狠狠色丁香婷综合久久| 国产欧美日韩精品在线| 91麻豆免费在线观看| 亚洲图片有声小说| 日韩免费成人网| 99久久国产综合精品麻豆| 亚州成人在线电影| 久久久久久久性| 91香蕉视频mp4| 青青草91视频| 国产精品二三区| 欧美片网站yy| 国产精品中文字幕欧美| 一区二区三区在线视频观看58|