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

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

?? chcode.c

?? 用于文件壓縮的huffman算法.zip 謝謝大家使用
?? C
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BITS            15
#define MAX_CODE        ( ( 1<<BITS )-1 )
#define TABLE_SIZE      35023l
#define TABLE_BANKS     ( ( TABLE_SIZE>>8 )+1 )
#define END_OF_STREAM   256
#define BUMP_CODE       257
#define FLUSH_CODE      258
#define FIRST_CODE      259
#define UNUSED          -1
#define PACIFIER_COUNT  2047

/*short  array[128]={6,33,34,35,36,37,38,39,5,41,42,43,44,45,46,47,
//		48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,7,65,66,67,
//		68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,
//		88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,
//		106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,
//		121,122,123,124,125,126,127,3,129,130,131,132,133,134,4,
//		136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,
//		151,152,153,154,155,156,157,158,159};
*/short  array[128]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
		17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,
		37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,
		57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,
                77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
		97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,
		117,118,119,120,121,122,123,124,125,126,127,128};

struct dictionary{
   short  code_value;
   short  parent_code;
   char character;
   } * dict[TABLE_BANKS];

typedef struct bit_stream{
  unsigned char mask;
  short  rack;
  short  pacifier_counter;
  }BIT_STREAM;

void InitializeDictionary();
void InitializeStorage();
unsigned short  find_child_node( short  parent_code,short  child_character );
unsigned short  decode_string( unsigned short  offset,unsigned short  code );

void OutputBits( BIT_STREAM * bit_stream,
                 unsigned long code,
                 short  count,
                 unsigned char * outstream,
                 long * flag );
unsigned long InputBits( BIT_STREAM  * bit_stream,
                         short bit_count,
			 unsigned char * instream,
			 long length,
                         long * flag );

long code( unsigned char * instream,long length,unsigned char * outstream );
long uncode( unsigned char * instream,long length,unsigned char * outstream );

BIT_STREAM * OpenOutputBitStream( void );
BIT_STREAM * OpenInputBitStream( void );

void CompressStream( BIT_STREAM * output,
		   unsigned char * instream,
		   long length,
		   unsigned char * outstream ,
                   long * flag);
long ExpandStream( BIT_STREAM * input,
                   unsigned char * instream,
                   long length,
                   unsigned char * outstream);
long compress_code( unsigned char * instream,long length );
long uncode_expand( unsigned char * instream,long length );

#define DICT(i) dict[i>>8][i&0xff]

char decode_stack[TABLE_SIZE];
unsigned short  next_code;
short  current_code_bits;
unsigned short  next_bump_code;


long  compress_code( unsigned char * instream,long length )
{
  BIT_STREAM * output;
  unsigned char * outstream,* copy_outstream;
  unsigned char * mediastream,* copy_mediastream;
  long * flag,i;
/*  outstream=(unsigned char *)malloc(2*length+1);
*/  copy_outstream=outstream;
/*  mediastream=(unsigned char *)malloc(2*length);
*/  copy_mediastream=mediastream;
  flag=(long *)malloc(8);
  *flag=0;
  setbuf( stdout,NULL );
  output=OpenOutputBitStream();
  CompressStream( output,instream,length,outstream,flag );
  for( i=1l;i<=*flag;i++ )  * mediastream++=*outstream++;
  mediastream-=*flag;
  outstream-=*flag;
  length=code( mediastream,*flag,outstream );
  for( i=1l;i<=length;i++ ) *instream++=*outstream++;
  instream-=length;
  outstream-=length;
  free((unsigned char *)copy_outstream);
  free((unsigned char *)copy_mediastream);
  free((long *)flag);
  free((BIT_STREAM *)output);
  return(length);
}

void InitializeDictionary()
{
  unsigned short  i;

  for( i=0;i<TABLE_SIZE;i++ )
       DICT(i).code_value=UNUSED;
  next_code=FIRST_CODE;
  current_code_bits=9;
  next_bump_code=511;
}

void InitializeStorage()
{
  short  i;

  for( i=0;i<TABLE_BANKS;i++ )
       dict[i]=( struct dictionary * )calloc( 256,sizeof( struct dictionary ) );
  return;
}

void CompressStream( BIT_STREAM * output,
                     unsigned char * instream,
                     long length,
                     unsigned char * outstream,
                     long * flag)
{
  short  character;
  short  string_code;
  unsigned short  index;
  long i,j,k;


  InitializeStorage();
  InitializeDictionary();
  string_code=*instream; instream++;
  for( i=1l;i<=(length+1);i++ ){
         character= * instream;
         if(i==length) character=13;
         if(i==(length+1)) character=10;
         instream++;
         index=find_child_node( string_code,character );
         if( DICT( index ).code_value!=-1 )
             string_code=DICT( index ).code_value;
          else {
             DICT( index ).code_value=next_code++;
             DICT( index ).parent_code=string_code;
             DICT( index ).character=( char )character;
             j=*flag;
             OutputBits( output,( unsigned long )string_code,
                         current_code_bits,outstream,flag );
             for( k=1l;k<=(*flag-j);k++ ) *outstream++;
             string_code=character;
             if( next_code>MAX_CODE ) {
                 j=*flag;
                 OutputBits( output,( unsigned long )FLUSH_CODE,
                             current_code_bits,outstream,flag );
                 for( k=1l;k<=(*flag-j);k++ ) *outstream++;
                 InitializeDictionary();
               }
             else if( next_code>next_bump_code ){
                      j=*flag;
                      OutputBits( output,( unsigned long )BUMP_CODE,
                                  current_code_bits,outstream,flag);
                      for( k=1l;k<=(*flag-j);k++ ) *outstream++;
                      current_code_bits++;
                      next_bump_code<<=1;
                      next_bump_code|=1;

                  }
               }
              }
  j=*flag;
  OutputBits( output,( unsigned long )string_code,
              current_code_bits,outstream,flag );
  for( k=1l;k<=(*flag-j);k++ ) *outstream++;
  OutputBits( output,( unsigned long )END_OF_STREAM,
              current_code_bits,outstream,flag );
  for( k=0;k<TABLE_BANKS;k++ )
      free( (struct dictionary *) dict[k] );
}

unsigned short  find_child_node( short  parent_code,short  child_character )
{
  unsigned short  index;
  short  offset;

  index=( child_character<<( BITS-8 ) )^parent_code;
  if( index==0 )
      offset=1;
  else
      offset=TABLE_SIZE-index;
  for( ; ; ) {
       if( DICT( index ).code_value==UNUSED )
           return( ( unsigned short  )index );
       if( DICT( index ).parent_code==parent_code &&
           DICT( index ).character==( char )child_character )
           return( index );
       if( ( short  )index>=offset )
           index-=offset;
       else
           index+=TABLE_SIZE-offset;
       }
}


unsigned short  decode_string( unsigned short  count,unsigned short  code )
{
  while( code>256 ){
         decode_stack[count++]=DICT( code ).character;
         code=DICT( code ).parent_code;
         }
  decode_stack[count++]=( char )code;
  return( count );
}

void OutputBits( BIT_STREAM * bit_stream,unsigned long code,short  count,
                 unsigned char * outstream,long * flag )
{
  unsigned long mask;

  mask=1l<<( count-1 );
  while( mask!=0 ) {
     if( mask & code )
         bit_stream->rack|=bit_stream->mask;
     bit_stream->mask>>=1;
     if( bit_stream->mask==0 )  {
          * outstream=(unsigned char)(bit_stream->rack);
		  (*flag)++;
          outstream++;
          if( ( bit_stream->pacifier_counter++ & PACIFIER_COUNT )==0 );
           
         bit_stream->rack=0;
         bit_stream->mask=0x80;
        }
     mask >>= 1;
  }
}


BIT_STREAM * OpenOutputBitStream( )
{
  BIT_STREAM * bit_stream;

  bit_stream=( BIT_STREAM * )calloc( 1,sizeof( BIT_STREAM ) );
  if( bit_stream==NULL )
    return( bit_stream );
  bit_stream->rack=0;
  bit_stream->mask=0x80;
  bit_stream->pacifier_counter=0;
  return( bit_stream );
}

long  code( unsigned char * mediastream,
           long length,unsigned char * outstream )
{

  unsigned char rackin,rackout,out_char;
  short  i,j,flag,mask;
  long number;
  unsigned char bit[8];


  if( length/7*7==length ) number=length*8/7;
  else number=length*8/7+1;
  flag=1;
  for( i=1;i<=number;i++ ){
	  if( flag==9 ) flag=1;
	  mask=0x01;
          rackout=0;
          if( (flag==8)||(i==number) ) rackin=0;
          else{ rackin=* mediastream;
                mediastream++; }
	  rackout=(rackin>>flag);
	  for( j=(8-flag);j<=6;j++ )
               rackout |= bit[j];
          out_char=(unsigned char)(array[rackout]);
          *outstream++=out_char;
          for( j=(7-flag);j<=6;j++ ){
               bit[j]=rackin & mask;
	       bit[j]<<=(7-flag);
	       mask<<=1;}
	  flag++;
         }
  return( number );
}

long  uncode_expand( unsigned char * instream,long length )
{
  BIT_STREAM * input;
  unsigned char * outstream,* copy_outstream;
  unsigned char * mediastream,* copy_mediastream;
  long i;


  outstream=(unsigned char *)malloc(4*length);     
  copy_outstream=outstream;
  mediastream=(unsigned char *)malloc(2*length); 
  copy_mediastream=mediastream;
  setbuf( stdout,NULL );
  input=OpenInputBitStream( );
  length=uncode( instream,length,outstream);
  for( i=1l;i<=length;i++ ) *mediastream++=*outstream++;
  mediastream-=length;
  outstream-=length;
  length=ExpandStream( input,mediastream,length,outstream);
  for( i=1l;i<=length;i++ ) *instream++=*outstream++;
  instream-=length;
  outstream-=length;
  free((unsigned char *)copy_outstream );
  free((unsigned char *)copy_mediastream);
  free((BIT_STREAM *)input);
  return( length-2);
}


long ExpandStream( BIT_STREAM * input,unsigned char * instream,long length,
                   unsigned char * outstream )
{
  unsigned short new_code;
  unsigned short old_code;
  short character;
  unsigned short count;
  long k,j,ff=0;
  long * flag;

  flag=(long *)malloc(sizeof(long));
  *flag=0l;
  InitializeStorage();
  for( ; ; ) {
        InitializeDictionary();
        k=*flag;
        old_code=( unsigned short )InputBits( input,current_code_bits,
                                 instream,length,flag );
        for( j=1l;j<=(*flag-k);j++ ) instream++;
        /*************/
        if( old_code==length )  return( ff );
        /*************/
        if( old_code==END_OF_STREAM )
            { instream-=*flag;free((long*)flag); return( ff );}
        character=old_code;
        *outstream++=(unsigned char)(character);ff++;
        for( ; ; ) {
             k=*flag;
             new_code=( unsigned short )InputBits( input,current_code_bits ,
                                         instream,length,flag );
             for( j=1l;j<=(*flag-k);j++ ) instream++;
        /*************/
        if( new_code==length ) return(ff);
        /*************/
        if( new_code==END_OF_STREAM )
            { instream-=*flag;free((long *)flag); return( ff );}
        if( new_code==FLUSH_CODE )
            break;
        if( new_code==BUMP_CODE ) {
            current_code_bits++;
            continue;
        }
        if( new_code>=next_code ) {
            decode_stack[0]=( char )character;
            count=decode_string( 1,old_code );
            }
        else
            count=decode_string( 0,new_code );
        character=decode_stack[count-1];
        while( count>0 )
             {  * outstream++=decode_stack[--count];ff++;}

        DICT( next_code ).parent_code=old_code;
        DICT( next_code ).character=( char )character;
        next_code++;
        old_code=new_code;
        }
     }
}


unsigned long InputBits( BIT_STREAM * bit_stream,short bit_count,
			 unsigned char * instream,long length,long * flag )
{
  unsigned long mask;
  unsigned long return_value;

  mask=1l<<( bit_count-1 );
  return_value=0;
  while( mask!=0 ) {
     if( bit_stream->mask==0x80 ) {
         bit_stream->rack=* instream++; (*flag)++;
         /****************/
         if( *flag==length ) return( length );
         /****************/
         if( ( bit_stream->pacifier_counter++ & PACIFIER_COUNT )==0 );
         }
     if( bit_stream->rack & bit_stream->mask )
         return_value|=mask;
     mask>>=1;
     bit_stream->mask>>=1;
     if( bit_stream->mask==0 )
         bit_stream->mask=0x80;
   }
  return( return_value );
}

BIT_STREAM * OpenInputBitStream( )
{
  BIT_STREAM * bit_stream;

  bit_stream=( BIT_STREAM * )calloc( 1,sizeof( BIT_STREAM ) );
  if( bit_stream==NULL )
    return( bit_stream );
  bit_stream->rack=0;
  bit_stream->mask=0x80;
  bit_stream->pacifier_counter=0;
  return( bit_stream );
}

long uncode( unsigned char * instream,long length,unsigned char * outstream )
{
  unsigned char rackin;
  unsigned char rackout;
  short mask;
  short j,flag;
  unsigned char bit[8];
  long i,k=0;
  
  for( i=1l;i<=length;i++ ){
       rackin=* instream++;
       for( j=0;j<=127;j++ )
	    if( array[j]==rackin )  break;
       rackin=(unsigned char)(j);
       rackout=( rackin<<1 ) ;
       for( flag=0;flag<=6;flag++ ){
            mask=0x40;
	    rackin=*instream++;
            i++;if(i>length) break;
	    for( j=0;j<=127;j++ )
		 if( array[j]==rackin ) break;
            rackin=(unsigned char)(j);
            for( j=flag;j>=0;j-- ){
                 bit[j]=rackin & mask;
                 bit[j]>>=(6-flag);
                 rackout |= bit[j];
                 mask>>=1;
                 }
       
       *outstream++=rackout; k++;
       rackout=( rackin<<(flag+2) );
       }
  }
  * outstream++=0xfe;k+=1;
  return( k );
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品久久久蜜桃| 88在线观看91蜜桃国自产| 日韩电影免费在线看| 亚洲女与黑人做爰| 中文字幕在线播放不卡一区| 欧美激情一区在线观看| 日本一区二区三级电影在线观看 | 精品美女一区二区| 欧美在线你懂得| 欧美在线视频日韩| 欧美日韩综合不卡| 欧美丰满一区二区免费视频| 日韩一区二区在线免费观看| 日韩精品中文字幕在线一区| 精品入口麻豆88视频| 国产香蕉久久精品综合网| 国产亚洲欧美日韩日本| 中文字幕视频一区| 亚洲国产一二三| 久久激情五月激情| 国产不卡视频在线播放| 91国偷自产一区二区使用方法| 在线观看亚洲精品视频| 在线播放一区二区三区| 97久久精品人人做人人爽50路| 美日韩一区二区| 成人精品视频.| 麻豆高清免费国产一区| 国产在线视视频有精品| fc2成人免费人成在线观看播放| 不卡电影免费在线播放一区| 欧美性感一区二区三区| 日韩三级电影网址| 亚洲视频一区二区免费在线观看| 亚洲不卡av一区二区三区| 狠狠网亚洲精品| 欧洲av在线精品| 欧美电影免费观看高清完整版在线| 国产精品久久久久久户外露出| 亚洲一区二区视频| 国产精品自在欧美一区| 在线视频国内一区二区| 久久免费电影网| 久久久国产精华| xnxx国产精品| 日韩一级二级三级| 国产精品国产自产拍高清av | 久久亚洲综合av| 亚洲在线视频网站| 国产成人精品一区二| 欧美三级日韩三级国产三级| 国产精品久久久久久妇女6080| 蜜桃视频在线观看一区二区| 91首页免费视频| 337p日本欧洲亚洲大胆精品| 亚洲国产精品欧美一二99 | 国产精品高潮呻吟久久| 免费看精品久久片| 欧美日韩国产综合一区二区| 亚洲男人都懂的| 成人av在线播放网站| 欧美mv和日韩mv国产网站| 日本一区中文字幕| 欧美日韩在线播放三区四区| 亚洲另类春色校园小说| 成人黄色大片在线观看| 日本一区免费视频| 日本不卡视频在线| 国产成人自拍高清视频在线免费播放| 精品制服美女丁香| 欧美一级黄色片| 天天av天天翘天天综合网色鬼国产| 99re这里只有精品首页| 中文在线一区二区| 99久久伊人精品| 日韩理论电影院| 91麻豆精东视频| 亚洲黄色免费电影| 91黄色免费观看| 亚洲一区二区高清| 欧美色图12p| 青娱乐精品视频在线| 欧美一区二区三区免费大片| 美女脱光内衣内裤视频久久影院| 欧美一级久久久久久久大片| 久久成人免费电影| 久久精品欧美一区二区三区麻豆| 国产成人在线影院| 伊人开心综合网| 欧美日本韩国一区二区三区视频| 日韩精品电影在线观看| 日韩写真欧美这视频| 韩国欧美国产1区| 国产精品伦理一区二区| 在线亚洲一区二区| 日韩不卡一区二区| 久久久久久久久久美女| 成人亚洲精品久久久久软件| 亚洲同性gay激情无套| 欧美日韩中文国产| 久88久久88久久久| 国产精品久久久久久亚洲伦| 色狠狠色狠狠综合| 毛片一区二区三区| 国产精品国产自产拍在线| 精品视频在线免费观看| 国内精品伊人久久久久av一坑 | 99久久精品免费看国产免费软件| 久久久久久久久久美女| 夜夜精品视频一区二区| 日韩精品一区二区三区视频| 国产suv精品一区二区三区| 伊人性伊人情综合网| 欧美成人午夜电影| 91福利视频网站| 狠狠狠色丁香婷婷综合激情| 有坂深雪av一区二区精品| 精品国产乱码久久久久久免费| 风流少妇一区二区| 日日夜夜精品视频天天综合网| 国产精品视频观看| 制服丝袜在线91| av网站一区二区三区| 奇米影视7777精品一区二区| 亚洲免费观看在线观看| 久久久久久免费网| 欧美色区777第一页| 成人黄页毛片网站| 另类调教123区| 亚洲国产裸拍裸体视频在线观看乱了| 久久日一线二线三线suv| 欧美日韩不卡一区| 91热门视频在线观看| 国产一区二区剧情av在线| 日韩电影在线免费| 亚洲午夜成aⅴ人片| 日韩理论在线观看| 中文字幕的久久| 26uuu久久综合| 欧美一区二区观看视频| 欧美亚一区二区| 欧美午夜精品久久久久久孕妇 | 精品视频色一区| 91麻豆自制传媒国产之光| 免费成人在线观看| 成人av动漫网站| 性久久久久久久久| 欧美日韩一级视频| av网站免费线看精品| 国产jizzjizz一区二区| 麻豆一区二区三| 麻豆成人久久精品二区三区红| 亚洲永久精品国产| 亚洲一区二区综合| 亚洲成va人在线观看| 亚洲成人综合视频| 偷窥国产亚洲免费视频| 午夜久久久久久| 午夜av一区二区| 男女男精品网站| 蜜桃视频免费观看一区| 久久99精品国产麻豆不卡| 久久国产精品色| 国产福利一区二区三区| 成人免费av在线| 91免费小视频| 欧美性色欧美a在线播放| 欧美性猛交一区二区三区精品| 色伊人久久综合中文字幕| 欧美一区二视频| 精品福利av导航| 国产精品天天看| 亚洲欧美欧美一区二区三区| 亚洲第一久久影院| 精品在线一区二区三区| 成a人片亚洲日本久久| 欧美视频一区二区在线观看| 7777精品伊人久久久大香线蕉超级流畅| 欧美美女一区二区在线观看| 日韩一区二区免费电影| 国产精品三级久久久久三级| 亚洲欧美日韩国产另类专区| 日本美女视频一区二区| 国产一区二区视频在线播放| 色综合天天天天做夜夜夜夜做| 欧美日韩国产首页| 国产农村妇女毛片精品久久麻豆| 亚洲美女精品一区| 男女男精品视频网| yourporn久久国产精品| 欧美精品在线观看播放| 久久精品一区蜜桃臀影院| 亚洲综合色噜噜狠狠| 精品无人码麻豆乱码1区2区| 91免费国产在线观看| 日韩一区二区在线观看| 亚洲免费观看视频| 国产大片一区二区| 欧美精品日韩综合在线| 中文字幕日韩一区|