亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产高清无密码一区二区三区| 亚洲男人的天堂在线观看| 国产一区在线视频| 美女网站在线免费欧美精品| 亚洲精品一卡二卡| 亚洲欧美色图小说| 亚洲大片一区二区三区| 日本视频在线一区| 久久99精品国产| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 精品夜夜嗨av一区二区三区| 午夜久久久久久电影| 首页国产欧美久久| 亚洲成人久久影院| 日韩成人精品在线| 国产乱淫av一区二区三区| 国产91精品在线观看| 北条麻妃国产九九精品视频| av在线一区二区三区| 欧美午夜影院一区| 日韩视频一区二区三区在线播放 | 精品久久久久一区| 久久久午夜精品理论片中文字幕| 国产中文一区二区三区| 国产一区二区看久久| 成人久久久精品乱码一区二区三区| 亚洲欧洲中文日韩久久av乱码| 欧美乱熟臀69xxxxxx| 4438亚洲最大| 久久久久久久电影| 亚洲制服丝袜在线| 看电影不卡的网站| 91在线视频网址| 日韩一区二区三区三四区视频在线观看| 国产精品1区2区| 成人国产亚洲欧美成人综合网 | 粉嫩av一区二区三区| 一本一道久久a久久精品综合蜜臀| 日韩电影一区二区三区| 韩国成人在线视频| 欧美日韩综合色| 久久综合九色综合欧美亚洲| 亚洲欧美日韩国产手机在线| 日本亚洲视频在线| 成人精品免费视频| 欧美大片一区二区三区| 亚洲综合色婷婷| 成人理论电影网| 2020国产精品自拍| 视频在线在亚洲| 99久久精品免费| 久久综合久久综合九色| 日韩国产精品久久| 色av综合在线| 国产精品久久综合| 国产成人综合自拍| 日韩精品在线一区| 日本美女一区二区三区视频| 在线观看视频一区二区| 国产欧美日韩三级| 国产一区二区福利视频| 欧美videofree性高清杂交| 亚洲国产成人91porn| 色综合久久六月婷婷中文字幕| 91亚洲国产成人精品一区二三| 豆国产96在线|亚洲| 久久色.com| 日本vs亚洲vs韩国一区三区 | 欧美日韩激情一区二区三区| 中文字幕一区二区三区精华液| 亚洲国产精品精华液ab| 国产一区二区伦理片| 2024国产精品视频| 国产麻豆精品久久一二三| 精品成人a区在线观看| 麻豆精品视频在线观看| 91精品免费观看| 婷婷亚洲久悠悠色悠在线播放| 麻豆成人av在线| 日韩精品综合一本久道在线视频| 精品成人私密视频| 国产一区亚洲一区| 欧美激情中文字幕| 91视频.com| 亚洲一区二区在线免费观看视频| 日韩国产高清影视| 日韩午夜在线观看| 黄色日韩三级电影| 国产人成亚洲第一网站在线播放| 亚洲欧美日韩国产另类专区| 一本到高清视频免费精品| 一区二区三区蜜桃网| 欧美日韩精品一区二区三区蜜桃 | av毛片久久久久**hd| 日韩美女精品在线| 色视频成人在线观看免| 亚洲午夜久久久久久久久电影网 | 青娱乐精品视频| 亚洲精品一区二区在线观看| 国产乱色国产精品免费视频| 久久青草欧美一区二区三区| 99国产精品国产精品毛片| 亚洲观看高清完整版在线观看| 国产乱子伦一区二区三区国色天香| 在线精品亚洲一区二区不卡| 亚洲精品乱码久久久久久| 欧美日韩免费不卡视频一区二区三区 | 国产自产高清不卡| 国产精品美女久久久久高潮| 欧美三片在线视频观看| 麻豆一区二区三| 国产精品欧美一级免费| 欧美日本一区二区在线观看| 国产一区999| 亚洲风情在线资源站| 欧美精品一区二区在线播放| 一本久道中文字幕精品亚洲嫩| 国产精品国产自产拍在线| 在线精品视频免费播放| 极品少妇一区二区三区精品视频| 在线不卡的av| 成人app软件下载大全免费| 午夜精品久久久久久久久久久| av网站一区二区三区| 麻豆成人在线观看| 亚洲制服欧美中文字幕中文字幕| 99国内精品久久| 国产最新精品精品你懂的| ●精品国产综合乱码久久久久| 粉嫩av一区二区三区在线播放| 久久精品人人爽人人爽| 91麻豆精品国产91久久久久| eeuss影院一区二区三区 | 国产 欧美在线| 日本三级亚洲精品| 亚洲成人免费视频| 亚洲色大成网站www久久九九| 成人精品免费网站| 国产一区二区三区在线观看免费| 精品久久国产老人久久综合| 欧美视频一区在线| 91久久久免费一区二区| 不卡av在线网| 国产九色精品成人porny| 久久99精品久久久久久动态图| 日韩亚洲电影在线| 91精品国产乱| 欧美一区二区网站| 色天天综合色天天久久| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲少妇屁股交4| 国产精品久久久久aaaa樱花| 精品国产百合女同互慰| 欧美电影免费观看完整版| 欧美一区二区三区成人| 日韩欧美精品在线视频| 日韩一区二区三区在线视频| 777亚洲妇女| 日韩一区二区精品在线观看| 日韩一区国产二区欧美三区| 日韩欧美视频在线| 国产日韩欧美麻豆| 椎名由奈av一区二区三区| 亚洲视频图片小说| 亚洲1区2区3区4区| 免费成人小视频| 国产一区二三区| 成人午夜精品一区二区三区| 99久久精品免费看| 欧美在线视频你懂得| 欧美一区二区视频在线观看2022| 久久99精品国产麻豆婷婷| 黄色日韩网站视频| 成人av在线观| 欧美亚洲精品一区| 欧美一级一区二区| 国产日本欧洲亚洲| 自拍偷拍国产亚洲| 午夜精品久久久久久久久| 久久99日本精品| 波多野结衣中文字幕一区 | 一本久久精品一区二区| 色综合久久久久综合体| 欧美精品精品一区| 久久九九全国免费| 亚洲国产精品久久久久秋霞影院 | 欧美国产日产图区| 亚洲美女淫视频| 人人狠狠综合久久亚洲| 成人午夜免费视频| 91精品国产综合久久福利| 国产精品色噜噜| 天堂成人国产精品一区| 成人精品一区二区三区中文字幕| 久久成人免费网| 色哟哟欧美精品| 国产欧美日韩另类一区| 午夜视频在线观看一区二区三区| 亚洲欧美日韩国产综合| 国产一区二区免费在线|