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

📄 复件 main.cpp

📁 huffman 压缩算法 支持文件夹的压缩与解压
💻 CPP
字号:
// huffman.cpp : Defines the entry point for the console application.
//

#include <iostream>
#include <cstdlib>
#include <tchar.h>
#include "huffman.h"


int get_file_size(FILE *fp);

int _tmain(int argc, _TCHAR* argv[])
{
    FILE *source_file, *dest_file;
    unsigned char *sour, *dest;
    int usize, csize;

    if (argc != 4)
    {
        wprintf(L" bad arguments.\n");
        wprintf(L"  huffman.exe e sourfile destfile\n");
        wprintf(L"  huffman.exe d sourfile destfile\n");
        exit(1);
    }

    else if ((source_file = _wfopen(argv[2], L"rb")) == NULL)
    {
        wprintf(L"bad file %s.\n", argv[2]);
        exit(1);
    }
    else if ((dest_file = _wfopen(argv[3], L"wb")) == NULL)
    {
        wprintf(L"bad file %s.\n", argv[3]);
        exit(1);
    }
    else
    {

        

        if (!wcscmp(argv[1], L"e"))
        {

			Huffman huffman;
            usize = get_file_size(source_file);

            sour = new unsigned char[usize];
            dest = new unsigned char[usize];
            usize = (int)fread(sour, 1, usize, source_file);

            huffman.encode(dest, csize, sour, usize);

            fwrite(dest, 1, csize, dest_file);
            wprintf(L" cmpression ration: %.2f\n", (float)usize / (float)csize);
        }
        else if (!wcscmp(argv[1], L"d"))
        {
			Huffman huffman;
            csize = get_file_size(source_file);

            sour = new unsigned char[csize];
            csize = fread(sour, 1, csize, source_file);

            dest = new unsigned char[huffman.get_uncompressed_size(sour)];

            huffman.decode(dest, usize, sour);

            fwrite(dest, 1, usize, dest_file);
        }
        else
        {
            wprintf(L"bad argument %s.\n", argv[4]);
            exit(1);
        }

        fclose(source_file);
        fclose(dest_file);
    }

    return 0;
}

int get_file_size(FILE *fp)
{
    fseek(fp, 0, SEEK_END);
    int size = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    return size;
}

⌨️ 快捷键说明

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