⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hufftst.c

📁 常用的无损压缩算法源代码
💻 C
字号:
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = *//*        H U F F M A N   C O D E   I M P L E M E N T A T I O N        *//* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = *//*     > > > > >    ANSI C version  4.03  -  05/30/95    < < < < <     *//*   Amir Said - amir@densis.fee.unicamp.br                            *//*   Faculty of Electrical Engineering                                 *//*   University of Campinas (UNICAMP) - Campinas, SP 13081, Brazil     *//*   William A. Pearlman - pearlman@ecse.rpi.edu                       *//*   Dept. of Electrical, Computer, and Systems Engineering            *//*   Rensselaer Polytechnic Institute - Troy, NY 12180, USA            *//* - - Inclusion - - - - - - - - - - - - - - - - - - - - - - - - - - - */#include "huffman.h"/* - - Definitions - - - - - - - - - - - - - - - - - - - - - - - - - - */int Random(int n);    /* Portable pseudo-random numbers generator      */                      /* returns integer in the interval [0,n-1]       */                      /* nonuniform distribution                       */void SRand(long);long seed_1, seed_2;long freq[16] = { 1, 23, 45, 112, 190, 240,   3,  6,    /* symbol      */                  1, 50, 55,  11,  70, 240, 300, 26 };  /* frequencies *//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *//* - - Main function - - - - - - - - - - - - - - - - - - - - - - - - - */int main(void){  Encoder enc;  Decoder dec;  int i, j, k, m;  long  nb;/* Random message coding */  Start_Encoder(&enc, "test.cod");  /* initialize encoder, open file */  Write_Code(&enc, 16, freq);       /* find and write Huffman code   */  SRand(111);         /* set random number generator for coding test */  for (i = 0; i < 500; i++) {    k = Random(16);                   /* get random data symbol      */    Write_Symbol(&enc, k);            /* code symbol                 */    k = Random(32);                   /* get random data symbol      */    Write_Bits(&enc, 5, k); }         /* code 5 bits                 */  Write_Code(&enc, 8, freq);      /* find and write new Huffman code */  for (i = 0; i < 500; i++) {        /* code new random data symbols */    k = Random(8);    Write_Symbol(&enc, k); }  Stop_Encoder(&enc);                  /* close encoded message file */  nb = Bytes_Used(&enc);               /* bytes used in the message  */  printf(" Coded message has %ld bytes.",  nb);/* Message decoding and testing */  Start_Decoder(&dec, "test.cod"); /* initialize decoder, open file */  m = Read_Code(&dec);             /* read Huffman code data        */  SRand(111);      /* set random number generator for decoding test */  for (i = 0; i < 500; i++) {    k = Random(m);    j = Read_Symbol(&dec);                   /* decode symbol       */    if (j != k)                              /* test decoded symbol */      puts("\aDecoding error!");    k = Random(32);    j = Read_Bits(&dec, 5);                   /* decode 5 bits       */    if (j != k)                               /* test decoded symbol */      puts("\aDecoding error!"); }  m = Read_Code(&dec);                 /* read new Huffman code data */  for (i = 0; i < 500; i++) {   /* decode next symbols with new code */    k = Random(m);    j = Read_Symbol(&dec);    if (j != k)      puts("\aDecoding error!"); }  printf("\n\n End of the Huffman coding test.\n\n");  return 0;}/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *//* - - Implementations of the random generator - - - - - - - - - - - - */int Random(int n){  long z, k;  double t;  k = seed_1 / 53668L;  seed_1 = 40014L * (seed_1 - k * 53668L) - k * 12211L;  if (seed_1 < 0L) seed_1 += 2147483563L;  k = seed_2 / 52774L;  seed_2 = 40692L * (seed_2 - k * 52774L) - k * 3791L;  if (seed_2 < 0L) seed_2 += 2147483399L;  z = seed_1 - seed_2;  if (z < 1) z += 2147483562L;  t = 4.656613e-10 * z;  return (int) (n * t * t);}/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */void SRand(long s){  seed_1 = s;  seed_2 = 2147483399L - s;}/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = *//* end of file < arithtst.c > */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -