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

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

?? lzw壓縮算法.cpp

?? LZW壓縮算法,提供了LZW壓縮算法詳細代碼和說明
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#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 )
    {
        if( !in_table(lzw) )
        {
                // current code not in code table
                // then add it to table and output prefix


                insert_table(lzw);
                prefix = lzw->suffix;
                output_code( lzw->prefix ,out ,lzw );
                lzw->code++;

                if( lzw->code == (WORD)1<< lzw->cur_code_len )
                {
                    // code reached current code top(1<<cur_code_len)
                    // then current code length add one
     lzw->cur_code_len++;
     if( lzw->cur_code_len == CODE_LEN + 1 )
     {
      re_init_lzw( lzw );
     }

                }
        }
        else
        {
                // current code already in code table 
                // then output nothing
                prefix = get_code(lzw);

        }
        lzw->prefix = prefix;
        lzw->suffix = in->lp_buffer[ in->index++ ];
    }
}

//------------------------------------------------------------------------------
VOID encode(HANDLE h_sour,HANDLE h_dest)
{
    LZW_DATA        lzw;
    BUFFER_DATA     in ;
    BUFFER_DATA     out;
    
    BOOL first_run = TRUE;

    lzw_create( &lzw ,h_sour,h_dest );
    buffer_create( &in );
    buffer_create( &out );


    while( load_buffer( h_sour, &in ) )
    {
        if( first_run )
        {// File length should be considered  but here we simply 
         // believe file length bigger than 2 bytes.
                lzw.prefix = in.lp_buffer[ in.index++ ];
                lzw.suffix = in.lp_buffer[ in.index++ ];
                first_run = FALSE;
        }
        do_encode(&in , &out, &lzw);
    }
    
output_code(lzw.prefix, &out , &lzw);
output_code(lzw.suffix, &out , &lzw);
out.end_flag = TRUE;
    empty_buffer( &lzw,&out);

    lzw_destory( &lzw );
    buffer_destory( &in );
    buffer_destory( &out );
}

//------------------------------------------------------------------------------

#endif

//(5) decode.h  解壓函數(shù)主函數(shù)

#ifndef __DECODE_H__
#define __DECODE_H__
//------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
//------------------------------------------------------------------------------
VOID out_code( WORD code ,PBUFFER_DATA buffer,PLZW_DATA lzw,PSTACK_DATA stack)
{
WORD tmp;
if( code < 0x100 )
{
  stack->lp_stack[ stack->index++ ] = code;
}
else
{
   stack->lp_stack[ stack->index++ ] = lzw->lp_suffix[ code ];
   tmp = lzw->lp_prefix[ code ];
   while( tmp > 0x100 )
   {
    stack->lp_stack[ stack->index++ ] = lzw->lp_suffix[ tmp ];
    tmp = lzw->lp_prefix[ tmp ];
   }
   stack->lp_stack[ stack->index++ ] = (BYTE)tmp;

}


while( stack->index )
{
  if( buffer->index == BUFFERSIZE )
  {
   empty_buffer(lzw,buffer);
  }
  buffer->lp_buffer[ buffer->index++ ] = stack->lp_stack[ --stack->index ] ;
}
}
//------------------------------------------------------------------------------
VOID insert_2_table(PLZW_DATA lzw )
{

lzw->lp_code[ lzw->code ]   = lzw->code;
lzw->lp_prefix[ lzw->code ] = lzw->prefix;
lzw->lp_suffix[ lzw->code ] = lzw->suffix;
lzw->code++;

if( lzw->code == ((WORD)1<<lzw->cur_code_len)-1 )
{
  lzw->cur_code_len++;
  if( lzw->cur_code_len == CODE_LEN+1 )
      lzw->cur_code_len = 9;
}
if(lzw->code >= 1<<CODE_LEN )
{
  re_init_lzw(lzw);
}

}
//------------------------------------------------------------------------------
WORD get_next_code( PBUFFER_DATA buffer , PLZW_DATA lzw )
{

BYTE next;
WORD code;
while( buffer->by_left < lzw->cur_code_len )
{
  if( buffer->index == BUFFERSIZE )
  {
   load_buffer( lzw->h_sour, buffer );
  }
  next = buffer->lp_buffer[ buffer->index++ ];
  buffer->dw_buffer |= (DWORD)next << (24-buffer->by_left);
  buffer->by_left   += 8;
}
code = buffer->dw_buffer >> ( 32 - lzw->cur_code_len );
buffer->dw_buffer <<= lzw->cur_code_len;
buffer->by_left    -= lzw->cur_code_len;

return code;
}
//------------------------------------------------------------------------------
VOID do_decode( PBUFFER_DATA in, PBUFFER_DATA out, PLZW_DATA lzw, PSTACK_DATA stack)
{
WORD code;
WORD tmp;
while( in->index != in->top  )
{
  code = get_next_code( in ,lzw );

  if( code < 0x100 )
  {
   // code already in table 
   // then simply output the code
   lzw->suffix = (BYTE)code;
  }
  else 
  {
   if( code < lzw->code  )
   {
    // code also in table 
    // then output code chain
    
    tmp = lzw->lp_prefix[ code ];
    while( tmp > 0x100 )
    {
     tmp = lzw->lp_prefix[ tmp ];
    }
    lzw->suffix = (BYTE)tmp;
   }
   else
   {
    // code == lzw->code
    // code not in table
    // add code into table
    // and out put code 
    tmp = lzw->prefix;
    while( tmp > 0x100 )
    {
     tmp = lzw->lp_prefix[ tmp ];
    }
    lzw->suffix = (BYTE)tmp;
   }
  }
  insert_2_table( lzw );
  out_code(code,out,lzw,stack);

  lzw->prefix = code;

}

}
//------------------------------------------------------------------------------
VOID decode( HANDLE h_sour, HANDLE h_dest )
{
    LZW_DATA        lzw;
    BUFFER_DATA     in ;
    BUFFER_DATA     out;
STACK_DATA      stack;
BOOL   first_run;

first_run = TRUE;


    lzw_create( &lzw ,h_sour,h_dest );
    buffer_create( &in );
    buffer_create( &out );
stack_create(&stack );

    while( load_buffer( h_sour, &in ) )
    {
  if( first_run )
  {
   lzw.prefix = get_next_code( &in, &lzw );
   lzw.suffix = lzw.prefix;
   out_code(lzw.prefix, &out, &lzw , &stack);
   first_run = FALSE;
  }
        do_decode(&in , &out, &lzw, &stack);
    }

    empty_buffer( &lzw,&out);

    lzw_destory( &lzw );
    buffer_destory( &in );
    buffer_destory( &out );
stack_destory( &stack);
}

#endif

//2  下面給出一個應用上面模塊的簡單例子

#include <stdio.h>
#include <stdlib.h>
//------------------------------------------------------------------------------

#include "lzw.h"
#include "hash.h"
#include "fileio.h"
#include "encode.h"
#include "decode.h"

//------------------------------------------------------------------------------
HANDLE h_file_sour;  
HANDLE h_file_dest;
HANDLE h_file;
CHAR*  file_name_in = "d:\\\\code.c";
CHAR*  file_name_out= "d:\\\\encode.e";
CHAR*  file_name    = "d:\\\\decode.d";


//------------------------------------------------------------------------------
int main(int argc, char *argv[]) 
{
    h_file_sour = file_handle(file_name_in);
    h_file_dest = file_handle(file_name_out);
    h_file     = file_handle(file_name);


  encode(h_file_sour, h_file_dest);  
// decode(h_file_dest,h_file); 


    CloseHandle(h_file_sour); 
    CloseHandle(h_file_dest);  
    CloseHandle(h_file);

  return 0;      
}    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91视频观看免费| 中文字幕五月欧美| 亚洲免费观看高清完整| 激情综合色综合久久| 在线观看亚洲专区| 国产欧美一区二区三区在线看蜜臀| 一区二区日韩av| 成人伦理片在线| 精品盗摄一区二区三区| 日韩国产成人精品| 欧美系列亚洲系列| 亚洲男人的天堂网| 91蜜桃传媒精品久久久一区二区| 久久久久久久精| 蜜桃一区二区三区在线观看| 在线电影国产精品| 亚洲成人激情社区| 欧美性受xxxx黑人xyx性爽| 中文字幕视频一区二区三区久| 国产成人精品免费一区二区| 久久先锋资源网| 久久电影网站中文字幕| 日韩精品一区二| 国内精品嫩模私拍在线| 欧美电影免费提供在线观看| 美女视频一区二区三区| 日韩一级成人av| 日韩电影在线观看一区| 欧美一区二视频| 蜜桃视频第一区免费观看| 欧美日韩一区二区三区免费看 | 亚洲精品国产无天堂网2021| 成人av网站在线观看免费| 欧美国产欧美亚州国产日韩mv天天看完整| 国产在线一区观看| 日本一区二区综合亚洲| gogo大胆日本视频一区| 亚洲一区二区三区中文字幕| 欧美男人的天堂一二区| 美女视频一区二区三区| 精品国产一二三| 懂色中文一区二区在线播放| 亚洲欧洲www| 7777精品伊人久久久大香线蕉超级流畅| 一区二区三区在线高清| 欧美高清精品3d| 久久99久久99精品免视看婷婷| 久久蜜桃一区二区| 91视频国产观看| 天天综合天天综合色| 精品剧情v国产在线观看在线| 国产精品资源网| 亚洲精品日韩一| 日韩亚洲欧美在线| 粉嫩久久99精品久久久久久夜| 亚洲精品老司机| 91精品国产91热久久久做人人| 国产精品一二三区在线| 亚洲综合激情小说| 精品美女一区二区三区| 91小视频免费观看| 日韩在线一区二区| 欧美国产精品中文字幕| 在线不卡免费欧美| 国产成人精品三级| 日本伊人色综合网| 亚洲色图视频网| 精品区一区二区| 欧美亚洲国产怡红院影院| 国产美女久久久久| 亚洲不卡av一区二区三区| 国产免费观看久久| 欧美日韩国产综合一区二区三区 | 一区二区高清在线| 精品久久免费看| 欧美日韩一级片网站| 国产+成+人+亚洲欧洲自线| 丝袜亚洲精品中文字幕一区| 国产精品国产三级国产普通话99| 91精品欧美福利在线观看| 成人av高清在线| 国产一区二区视频在线播放| 亚洲成人av一区二区三区| 国产欧美精品一区二区三区四区 | 五月婷婷久久综合| 国产精品久久久一区麻豆最新章节| 4hu四虎永久在线影院成人| 一本一本大道香蕉久在线精品| 激情文学综合网| 婷婷激情综合网| 亚洲精品成人少妇| 中文字幕佐山爱一区二区免费| 久久先锋影音av鲁色资源| 日韩写真欧美这视频| 欧美日韩在线精品一区二区三区激情 | 福利电影一区二区三区| 久久66热re国产| 免费成人av在线播放| 亚洲午夜三级在线| 玉米视频成人免费看| 中文字幕在线不卡一区| 国产欧美视频一区二区三区| 精品久久久网站| 亚洲精品一线二线三线| 精品少妇一区二区三区日产乱码| 8x8x8国产精品| 欧美精品在线一区二区| 欧美日韩国产系列| 欧美日韩一本到| 欧美高清dvd| 欧美一区二区视频免费观看| 337p亚洲精品色噜噜狠狠| 91精品国产综合久久久蜜臀图片| 欧美片在线播放| 日韩一区二区三区四区五区六区| 日韩一区二区三区精品视频| 欧美一区欧美二区| 精品国产91洋老外米糕| 久久九九影视网| 中文字幕高清不卡| 亚洲激情六月丁香| 亚洲一区二区三区三| 午夜伊人狠狠久久| 精品中文av资源站在线观看| 国产一区二区三区av电影| 风间由美中文字幕在线看视频国产欧美| 国产精品自拍在线| 色综合视频在线观看| 欧美又粗又大又爽| 91精品欧美一区二区三区综合在| 精品剧情v国产在线观看在线| 久久精品视频在线免费观看| 国产精品国产自产拍高清av| 一区二区三区在线观看视频| 午夜影视日本亚洲欧洲精品| 精品午夜久久福利影院| 懂色av一区二区夜夜嗨| 欧美性xxxxxxxx| 久久久激情视频| 亚洲自拍另类综合| 国产在线观看免费一区| 一本一道久久a久久精品| 欧美一级欧美三级在线观看| 久久久久一区二区三区四区| 亚洲卡通动漫在线| 久久99国产精品麻豆| 色综合咪咪久久| 久久综合久久综合亚洲| 自拍av一区二区三区| 免费在线成人网| 91在线观看污| 日韩欧美综合在线| 亚洲激情中文1区| 国产成人三级在线观看| 欧美日韩国产天堂| 中文字幕中文字幕一区二区| 美女视频黄久久| 欧美自拍偷拍一区| 日本一区二区三区免费乱视频| 亚洲.国产.中文慕字在线| 成人av网址在线| 久久久三级国产网站| 亚洲国产你懂的| 91丝袜美女网| 国产丝袜欧美中文另类| 免播放器亚洲一区| 欧美亚洲国产一区二区三区| 欧美激情在线免费观看| 久久er99精品| 91精品欧美一区二区三区综合在| 亚洲乱码国产乱码精品精的特点| 国产一区视频在线看| 欧美一级国产精品| 偷拍自拍另类欧美| 欧美在线色视频| 国产精品不卡视频| 成人高清伦理免费影院在线观看| 欧美成va人片在线观看| 午夜私人影院久久久久| 91福利小视频| 一区二区三区在线不卡| 91在线观看美女| 自拍偷在线精品自拍偷无码专区| 国产福利精品导航| 久久久噜噜噜久久中文字幕色伊伊| 日本伊人精品一区二区三区观看方式| 91啪亚洲精品| 亚洲精品日韩综合观看成人91| 国产激情视频一区二区在线观看 | 99国产精品久久久久久久久久 | 亚洲一区在线观看网站| 99久久精品99国产精品| 国产精品久久久久永久免费观看 | 99久久精品免费精品国产| 中文字幕欧美日韩一区| 国产91色综合久久免费分享| 久久久久久久久97黄色工厂| 国产一区久久久| 国产欧美一区二区精品性| 国产成人啪午夜精品网站男同|