huffmancodes.cs

来自「PDF文件格式解析库源代码」· CS 代码 · 共 52 行

CS
52
字号
using System;
using System.Collections.Generic;
using System.Text;

namespace QiHe.CodeLib.Compress.DeflateFormat
{
    public partial class HuffmanCodes
    {
        HuffmanTree AlphabetHuffmanCode;
        HuffmanTree DistanceHuffmanCode;

        public HuffmanCodes(int[] alphabetCodeLengths, int[] distanceCodeLengths)
        {
            AlphabetHuffmanCode = HuffmanTree.FromCodeLengths(alphabetCodeLengths);
            DistanceHuffmanCode = HuffmanTree.FromCodeLengths(distanceCodeLengths);
        }

        public static readonly HuffmanCodes Default = CreateDefaultCodes();

        private static HuffmanCodes CreateDefaultCodes()
        {
            int[] alphabetCodeLengths = new int[288];
            for (int n = 0; n < 144; n++)
            {
                alphabetCodeLengths[n] = 8;
            }
            for (int n = 144; n < 256; n++)
            {
                alphabetCodeLengths[n] = 9;
            }
            for (int n = 256; n < 280; n++)
            {
                alphabetCodeLengths[n] = 7;
            }
            for (int n = 280; n < 288; n++)
            {
                alphabetCodeLengths[n] = 8;
            }

            int[] distanceCodeLengths = new int[32];
            for (int n = 0; n < 32; n++)
            {
                distanceCodeLengths[n] = 5;
            }

            return new HuffmanCodes(alphabetCodeLengths, distanceCodeLengths);
        }
        
        static readonly int[] CodeLengthOrder = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
    }
}

⌨️ 快捷键说明

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