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

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

?? hffile.cpp

?? 惠普實驗室的經典代碼。用于huffman編碼的快速實現
?? CPP
字號:
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
//                       *************************                           -
//                        HUFFMAN CODING EXAMPLES                            -
//                       *************************                           -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
// Simple file compression using Huffman coding                              -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
// Version 1.00  -  January 24, 2005                                         -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
//                                  WARNING                                  -
//                                 =========                                 -
//                                                                           -
// The only purpose of this program is to demonstrate the basic principles   -
// of Huffman codes. It is provided as is, without any express or implied    -
// warranty, without even the warranty of fitness for any particular         -
// purpose, or that the implementations are correct.                         -
//                                                                           -
// Permission to copy and redistribute this code is hereby granted, provided -
// that this warning and copyright notices are not removed or altered.       -
//                                                                           -
// Copyright (c) 2005 by Amir Said (said@ieee.org) &                         -
//                       William A. Pearlman (pearlw@ecse.rpi.edu)           -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


// - - Inclusion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

#include <stdlib.h>
#include "binary_codec.h"


// - - Constants - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

const char * W_MSG = "cannot write to file";
const char * R_MSG = "cannot read from file";

const unsigned NumModels  = 16;                          // MUST be power of 2

const unsigned FILE_ID    = 0xB8AF3B23U;

const unsigned BufferSize = 65536;


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - Prototypes  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Encode_File(char * data_file_name,
                 char * code_file_name);

void Decode_File(char * code_file_name,
                 char * data_file_name);


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - Main function - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

int main(int numb_arg, char * arg[])
{
                                                       // define program usage
  if ((numb_arg != 4) || (arg[1][0] != '-') || 
     ((arg[1][1] != 'c') && (arg[1][1] != 'd'))) {
    puts("\n\t Compression parameters:   acfile -c data_file compressed_file");
    puts("\n\t Decompression parameters: acfile -d compressed_file new_file\n");
    exit(0);
  }

  if (arg[1][1] == 'c')
    Encode_File(arg[2], arg[3]);
  else
    Decode_File(arg[2], arg[3]);

  return 0;
}


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - Implementations - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Error(const char * s)
{
  fprintf(stderr, "\n Error: %s.\n\n", s);
  exit(1);
}

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

unsigned Buffer_CRC(unsigned bytes,
                    unsigned char * buffer)
{
  static const unsigned CRC_Gen[8] = {        // data for generating CRC table
    0xEC1A5A3EU, 0x5975F5D7U, 0xB2EBEBAEU, 0xE49696F7U,
    0x486C6C45U, 0x90D8D88AU, 0xA0F0F0BFU, 0xC0A0A0D5U };

  static unsigned CRC_Table[256];            // table for fast CRC computation

  if (CRC_Table[1] == 0)                                      // compute table
    for (unsigned k = CRC_Table[0] = 0; k < 8; k++) {
      unsigned s = 1 << k, g = CRC_Gen[k];
      for (unsigned n = 0; n < s; n++) CRC_Table[n+s] = CRC_Table[n] ^ g;
    }

                                  // computes buffer's cyclic redundancy check
  unsigned crc = 0;
  if (bytes)
    do {
      crc = (crc >> 8) ^ CRC_Table[(crc&0xFFU)^unsigned(*buffer++)];
    } while (--bytes);
  return crc;
}

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

FILE * Open_Input_File(char * file_name)
{
  FILE * new_file = fopen(file_name, "rb");
  if (new_file == 0) Error("cannot open input file");
  return new_file;
}

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

FILE * Open_Output_File(char * file_name)
{
  FILE * new_file = fopen(file_name, "rb");
  if (new_file != 0) {
    fclose(new_file);
    printf("\n Overwrite file %s? (y = yes, otherwise quit) ", file_name);
    char line[128];
    gets(line);
    if (line[0] != 'y') exit(0);
  }
  new_file = fopen(file_name, "wb");
  if (new_file == 0) Error("cannot open output file");
  return new_file;
}

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

void Save_Number(unsigned n, unsigned char * b)
{                                                   // decompose 4-byte number
  b[0] = (unsigned char)( n        & 0xFFU);
  b[1] = (unsigned char)((n >>  8) & 0xFFU);
  b[2] = (unsigned char)((n >> 16) & 0xFFU);
  b[3] = (unsigned char)( n >> 24         );
}

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

unsigned Recover_Number(unsigned char * b)
{                                                    // recover 4-byte integer
  return unsigned(b[0]) + (unsigned(b[1]) << 8) + 
        (unsigned(b[2]) << 16) + (unsigned(b[3]) << 24);
}

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

void Encode_File(char * data_file_name,
                 char * code_file_name)
{
                                                                 // open files
  FILE * data_file = Open_Input_File(data_file_name);
  FILE * code_file = Open_Output_File(code_file_name);

                                                  // buffer for data file data
  unsigned char * data = new unsigned char[BufferSize];

  unsigned nb, bytes = 0, crc = 0;       // compute CRC (cyclic check) of file
  do {
    nb = fread(data, 1, BufferSize, data_file);
    bytes += nb;
    crc ^= Buffer_CRC(nb, data);
  } while (nb == BufferSize);

                                                      // define 12-byte header
  unsigned char header[12];
  Save_Number(FILE_ID, header);
  Save_Number(crc,      header + 4);
  Save_Number(bytes,    header + 8);
  if (fwrite(header, 1, 12, code_file) != 12) Error(W_MSG);
                                                            // set data models
  Adaptive_Huffman_Code dm[NumModels];
  for (unsigned m = 0; m < NumModels; m++) dm[m].set_alphabet(256);

  Binary_Codec encoder(BufferSize);                  // set encoder buffer

  rewind(data_file);                               // second pass to code file

  unsigned context = 0;
  do {

    nb = (bytes < BufferSize ? bytes : BufferSize);
    if (fread(data, 1, nb, data_file) != nb) Error(R_MSG);   // read file data

    encoder.start_encoder();
    for (unsigned p = 0; p < nb; p++) {                       // compress data
      encoder.encode(data[p], dm[context]);
      context = unsigned(data[p]) & (NumModels - 1);
    }

    encoder.write_to_file(code_file);  // stop encoder & write compressed data

  } while (bytes -= nb);

                                                          // done: close files
  fflush(code_file);
  unsigned data_bytes = ftell(data_file), code_bytes = ftell(code_file);
  printf(" Compressed file size = %d bytes (%6.2f:1 compression)\n",
    code_bytes, double(data_bytes) / double(code_bytes));
  fclose(data_file);
  fclose(code_file);

  delete [] data;
}

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

void Decode_File(char * code_file_name,
                 char * data_file_name)
{
                                                                 // open files
  FILE * code_file = Open_Input_File(code_file_name);
  FILE * data_file = Open_Output_File(data_file_name);

                                   // read file information from 12-byte header
  unsigned char header[12];
  if (fread(header, 1, 12, code_file) != 12) Error(R_MSG);
  unsigned fid   = Recover_Number(header);
  unsigned crc   = Recover_Number(header + 4);
  unsigned bytes = Recover_Number(header + 8);

  if (fid != FILE_ID) Error("invalid compressed file");

                                                  // buffer for data file data
  unsigned char * data = new unsigned char[BufferSize];
                                                            // set data models
  Adaptive_Huffman_Code dm[NumModels];
  for (unsigned m = 0; m < NumModels; m++) dm[m].set_alphabet(256);

  Binary_Codec decoder(BufferSize);                  // set encoder buffer

  unsigned nb, new_crc = 0, context = 0;                    // decompress file
  do {

    decoder.read_from_file(code_file); // read compressed data & start decoder

    nb = (bytes < BufferSize ? bytes : BufferSize);
                                                            // decompress data
    for (unsigned p = 0; p < nb; p++) {
      data[p] = (unsigned char) decoder.decode(dm[context]);
      context = unsigned(data[p]) & (NumModels - 1);
    }
    decoder.stop_decoder();

    new_crc ^= Buffer_CRC(nb, data);                // compute CRC of new file
    if (fwrite(data, 1, nb, data_file) != nb) Error(W_MSG);

  } while (bytes -= nb);


  fclose(data_file);                                     // done: close files
  fclose(code_file);

  delete [] data;
                                                   // check if file is correct
  if (crc != new_crc) Error("incorrect file CRC");
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
热久久一区二区| 日韩精品乱码av一区二区| 国产视频一区不卡| 久久久久久久综合日本| 中文字幕一区不卡| 一区二区不卡在线播放| 午夜精品一区在线观看| 男男成人高潮片免费网站| 国产mv日韩mv欧美| 欧美日韩一区二区在线视频| 欧美美女一区二区| 久久久精品中文字幕麻豆发布| 国产日产欧美精品一区二区三区| 国产精品网曝门| 日韩avvvv在线播放| 成人污污视频在线观看| 欧美丰满嫩嫩电影| 性做久久久久久免费观看| 精品一区二区综合| 欧美一区二区精品久久911| 日本一区二区三区国色天香 | 成人av电影在线| 欧美日韩免费高清一区色橹橹| 久久美女艺术照精彩视频福利播放 | 国产精品一区一区| 欧美午夜电影网| 国产精品久久精品日日| 理论片日本一区| 欧美天天综合网| 一区二区免费看| 91欧美激情一区二区三区成人| 在线视频综合导航| 国产精品女同互慰在线看| 日韩和欧美一区二区| 91在线视频免费91| 亚洲精品水蜜桃| 色诱视频网站一区| 最新成人av在线| 色系网站成人免费| 国产激情视频一区二区三区欧美| 欧美剧在线免费观看网站 | 日韩精品电影在线| 麻豆传媒一区二区三区| 日韩一级视频免费观看在线| 成人精品国产福利| 韩国精品主播一区二区在线观看| 国产精品免费视频网站| 欧美日韩国产天堂| 91视频免费观看| 国产成人自拍网| 免费精品视频最新在线| 一区二区三区视频在线看| 久久久国产一区二区三区四区小说 | 国产一区二区不卡在线| 欧美激情综合在线| 欧美zozozo| 日韩欧美综合在线| 日韩一区二区视频| 欧美一区二区三区喷汁尤物| 欧美三级日韩三级国产三级| 99久久精品久久久久久清纯| 国产电影精品久久禁18| 国产精品99久久久久久久vr| 九九在线精品视频| 国产美女娇喘av呻吟久久 | 成人免费视频在线观看| 亚洲国产精品高清| 亚洲日本护士毛茸茸| 亚洲人成7777| 天堂午夜影视日韩欧美一区二区| 一区二区欧美精品| 日本强好片久久久久久aaa| 日韩精品亚洲专区| 国产激情视频一区二区三区欧美 | 99这里只有久久精品视频| 成人免费视频一区二区| 日本韩国欧美一区二区三区| 在线日韩国产精品| 欧美成人在线直播| 国产精品福利一区| 免费在线视频一区| 成人国产精品免费| 91视频免费看| 91精品国产一区二区三区| 国产日产欧美精品一区二区三区| 精品三级在线观看| 久久久久国产精品麻豆ai换脸| 国产精品伦理在线| 亚洲激情成人在线| 蜜桃av一区二区三区| 成人永久aaa| 欧美日韩一级视频| 日韩免费一区二区三区在线播放| 欧美tickling网站挠脚心| 国产欧美日韩在线视频| 亚洲综合久久久| 国产裸体歌舞团一区二区| 国产伦精品一区二区三区在线观看 | 日韩欧美亚洲国产另类| 欧美一级片免费看| 国产精品私人影院| 亚洲va国产va欧美va观看| 经典一区二区三区| 欧美日韩一区中文字幕| 欧美一区二区女人| 亚洲v中文字幕| 色诱亚洲精品久久久久久| 久久久久国产精品免费免费搜索| 国产精品乱人伦一区二区| 美女脱光内衣内裤视频久久网站 | 91麻豆精品国产91久久久久久 | 色综合色综合色综合色综合色综合| 91国偷自产一区二区开放时间| 久久嫩草精品久久久精品| 五月激情丁香一区二区三区| eeuss影院一区二区三区| 久久久久久久久久久久电影| 久久精品国产精品亚洲精品| 欧美日韩高清影院| 亚洲第一激情av| 欧美日韩精品一区视频| 丝袜美腿成人在线| 欧美一级电影网站| 美国三级日本三级久久99| 久久精品亚洲精品国产欧美| 日韩中文字幕91| 日韩欧美二区三区| 成人综合在线视频| 婷婷久久综合九色综合伊人色| 精品三级在线看| 成人美女视频在线观看| 一区二区国产视频| 欧美高清视频在线高清观看mv色露露十八| 一区二区三区四区视频精品免费| 欧美三级在线看| 免费观看一级欧美片| 国产欧美一区二区三区沐欲| av不卡免费电影| 五月天一区二区| 国产精品久久夜| 26uuu色噜噜精品一区| 91在线精品一区二区三区| 美国三级日本三级久久99| 首页综合国产亚洲丝袜| 亚洲综合偷拍欧美一区色| 一区二区三区小说| 亚洲成人av一区二区三区| 亚洲自拍偷拍麻豆| 性做久久久久久免费观看欧美| 亚洲综合一区在线| 亚洲在线视频网站| 国产精品三级视频| 久久精品亚洲精品国产欧美kt∨| 一本久道中文字幕精品亚洲嫩| 国产一区二区伦理| 手机精品视频在线观看| 亚洲在线视频一区| 亚洲在线观看免费| 亚洲另类春色国产| 久久网站最新地址| 精品国免费一区二区三区| 亚洲精品一区二区在线观看| 日韩美女一区二区三区四区| 欧美另类高清zo欧美| 欧美乱熟臀69xxxxxx| 91黄视频在线观看| 色婷婷久久久久swag精品| 91久久精品一区二区| 99精品久久只有精品| 成人精品鲁一区一区二区| 懂色一区二区三区免费观看| 国产成人精品免费网站| 国产成人精品午夜视频免费| 国产一区福利在线| 成人中文字幕电影| 欧美性一区二区| 亚洲女女做受ⅹxx高潮| 精品人伦一区二区色婷婷| 亚洲成av人片一区二区三区| 国产欧美视频在线观看| 婷婷夜色潮精品综合在线| 国产精品一二三在| 精品理论电影在线| 亚洲欧美日韩人成在线播放| 欧美三级韩国三级日本三斤 | 亚洲欧洲日产国码二区| 日韩国产精品久久久久久亚洲| 成人av在线资源网| 精品国产免费人成电影在线观看四季| 中文字幕在线一区| 国产精品亚洲成人| 精品对白一区国产伦| 日韩精品色哟哟| 欧美二区乱c少妇| 日韩成人av影视| 欧美日韩亚洲综合在线| 亚洲va在线va天堂| 欧美日韩中字一区| 天堂午夜影视日韩欧美一区二区| 色综合天天综合狠狠|