📄 hufftst.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 + -