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

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

?? lzw壓縮算法的c語言實現.txt

?? 一個c語言實現的基于字典編碼技術的lzw數據壓縮算法,能正確的實現壓縮和解壓縮
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
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  解壓函數主函數

#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一区二区三区免费野_久草精品视频
亚洲va欧美va人人爽| 亚洲精品一线二线三线无人区| 1区2区3区精品视频| 成人黄色电影在线| 国产精品网站在线观看| 91视频com| 亚洲国产sm捆绑调教视频 | 日本欧美久久久久免费播放网| 欧美日本韩国一区| 国产主播一区二区| 国产精品视频yy9299一区| 色呦呦一区二区三区| 亚洲成av人片一区二区梦乃| 欧美成人激情免费网| 国产成a人亚洲精品| 亚洲精品视频在线看| 91精品国产麻豆| 成人97人人超碰人人99| 亚洲成av人在线观看| 久久理论电影网| 色香蕉成人二区免费| 美女在线观看视频一区二区| 国产精品欧美一区喷水| 欧美日本在线播放| 国产99久久久久| 天堂一区二区在线免费观看| 欧美激情一区三区| 欧美肥胖老妇做爰| 大尺度一区二区| 日韩精品视频网| 成人欧美一区二区三区小说 | 精品一区二区三区在线观看| 中文字幕日本乱码精品影院| 日韩一区二区三区四区| 99久久99久久精品免费观看| 久久er99热精品一区二区| 一区二区三区四区不卡视频| 久久精品视频一区二区三区| 欧美午夜影院一区| 成年人国产精品| 激情亚洲综合在线| 亚洲第一综合色| 亚洲图片另类小说| 精品国产91九色蝌蚪| 欧美绝品在线观看成人午夜影视| 成人精品亚洲人成在线| 精品一区二区三区免费毛片爱| 亚洲免费视频中文字幕| 中文字幕精品在线不卡| 日韩欧美一区二区在线视频| 在线视频国内自拍亚洲视频| 成人激情免费网站| 激情都市一区二区| 日韩avvvv在线播放| 亚洲国产日韩综合久久精品| 欧美高清一级片在线观看| 欧美大度的电影原声| 欧美高清视频不卡网| 欧美亚洲一区三区| 91在线观看一区二区| 成人午夜大片免费观看| 狠狠色丁香婷综合久久| 久久99国内精品| 免费在线观看一区| 青草国产精品久久久久久| 亚洲第一福利一区| 午夜伊人狠狠久久| 亚洲成人在线网站| 亚洲国产精品一区二区久久| 亚洲最新视频在线观看| 亚洲综合图片区| 亚洲精品国产a久久久久久 | 成人午夜视频在线观看| 丁香啪啪综合成人亚洲小说| 国产九九视频一区二区三区| 国产经典欧美精品| 国产ts人妖一区二区| 成人网男人的天堂| aaa亚洲精品| 色噜噜狠狠一区二区三区果冻| 色哟哟国产精品免费观看| 色欧美日韩亚洲| 色妞www精品视频| 欧美午夜精品免费| 4438x亚洲最大成人网| 日韩三级伦理片妻子的秘密按摩| 日韩写真欧美这视频| 亚洲精品在线电影| 欧美激情一区二区三区在线| 1区2区3区国产精品| 亚洲制服丝袜av| 青草国产精品久久久久久| 激情av综合网| www.综合网.com| 欧美日韩国产小视频| 精品国产免费一区二区三区香蕉| 337p日本欧洲亚洲大胆精品 | 欧美大白屁股肥臀xxxxxx| 亚洲精品一区二区三区四区高清| 国产无人区一区二区三区| 国产精品理论片在线观看| 综合久久综合久久| 午夜久久久影院| 国产在线观看免费一区| 成人av片在线观看| 91麻豆精品国产91久久久久久久久| 精品三级在线看| 国产精品久久久久久亚洲伦| 午夜亚洲国产au精品一区二区| 狠狠色丁香婷婷综合| 91原创在线视频| 欧美一区二区日韩| 中文字幕国产一区| 五月综合激情网| 国产精品中文欧美| 欧美日韩中文一区| 久久久久99精品一区| 亚洲一卡二卡三卡四卡五卡| 国内精品伊人久久久久av一坑| 色婷婷综合在线| 2014亚洲片线观看视频免费| 亚洲精品视频一区| 国产酒店精品激情| 欧美美女视频在线观看| 欧美—级在线免费片| 日本视频一区二区三区| 94-欧美-setu| 久久婷婷一区二区三区| 亚洲高清不卡在线观看| 成人av电影免费在线播放| 欧美大片顶级少妇| 亚洲mv在线观看| 成人免费看视频| 欧美r级在线观看| 亚洲成人av电影在线| 97久久精品人人爽人人爽蜜臀| 精品久久免费看| 性感美女久久精品| 一本色道**综合亚洲精品蜜桃冫| 久久男人中文字幕资源站| 日韩成人午夜精品| 欧美日韩和欧美的一区二区| 亚洲视频一区二区免费在线观看| 国产精品一区在线| 欧美一区二区三区小说| 一区二区三区在线视频观看 | 欧美性色综合网| 国产精品色哟哟网站| 精品一区二区三区欧美| 欧美一区午夜视频在线观看| 亚洲一区免费视频| 色菇凉天天综合网| 亚洲人精品一区| 99久久精品国产观看| 国产精品女上位| 成人天堂资源www在线| 久久人人爽人人爽| 国产在线精品一区二区不卡了| 日韩一区二区电影在线| 蜜臀久久99精品久久久久宅男| 欧美疯狂性受xxxxx喷水图片| 亚洲h在线观看| 在线播放国产精品二区一二区四区| 亚洲制服丝袜一区| 欧美三区在线观看| 午夜精品福利一区二区三区蜜桃| 欧美少妇一区二区| 日本中文字幕一区二区有限公司| 欧美精品一级二级三级| 午夜婷婷国产麻豆精品| 欧美丰满嫩嫩电影| 精品一区二区三区免费视频| 久久在线观看免费| 国产精品亲子伦对白| 国产情人综合久久777777| 欧美日韩免费视频| 丁香五精品蜜臀久久久久99网站 | 日韩精品一区二区三区在线观看| 图片区小说区国产精品视频| 91麻豆精品国产综合久久久久久| 天天色 色综合| 日韩免费高清av| 国产福利91精品一区二区三区| 欧美激情一区不卡| 色婷婷综合五月| 日本成人超碰在线观看| 久久久激情视频| 91美女在线观看| 五月天激情综合网| 欧美va日韩va| 暴力调教一区二区三区| 亚洲一区二区三区四区在线免费观看 | 黄色小说综合网站| 久久久精品蜜桃| 成a人片亚洲日本久久| 亚洲福利一区二区| 日韩写真欧美这视频| 国产成人免费视| 亚洲成人tv网| 久久久亚洲高清|