• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

谁能把我看一下这个代码,哈夫曼编码压缩的,为什么压缩到最后总是会乱码?

#define _CRT_SECURE_NO_DEPRECATE
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int bytes_count = 0;//哈夫曼树的叶子节点
long long file_length = 0;//保持文件的字节数,初始为0
const int FILENAMEMAX = 128;//文件名(包括路径),长度不能超过127
const int SUFFIXNAMEMAX = 10;//文件后缀名长度不超过9个字符
char sourse_filename[FILENAMEMAX] = "test.txt";//源文件名字
char compress_filename[FILENAMEMAX] = "test.buf";//压缩文件名字
char decompress_filename[FILENAMEMAX] = "detest";//解压文件名字
char prefix_filename[128];//文件前缀名
char suffix_filename[128];//文件后缀名
const int BUFF_MAXSIZE = 1024 * 1024;//文件哈夫曼编码缓冲区的大小
char buff[BUFF_MAXSIZE] = "";/*文件哈夫曼编码缓冲区(生成压缩文件时,各字节
字节的编码先存在buff中,然后8个码压缩成一个字节存到buff_string中缓冲区)*/
char buff_string[BUFF_MAXSIZE / 8] = "";//压缩文件写入缓冲区
const int BLOCK_MAXSIZE = 1024 * 1024;//解写入解压文件的缓冲区的大小
char block[BLOCK_MAXSIZE] = "";//写入解压文件的缓冲区
int block_current = 0;//写解压文件缓冲区的当前读写位置


struct HaffNode
{
        unsigned char byte;//结点数据
        long long weight;//权值
        int parent;//双亲结点下标
        int leftChild;//左孩子下标
        int rightChild;//右孩子下标
        char code[256];//哈夫曼编码
        int code_len;//编码长度
};
HaffNode HaffTree[511];
HaffNode HaffTree2[511];
HaffNode HaffTree3[511];




void initHaffTree();


void Statistics();




bool compare(HaffNode a, HaffNode b);


void paixu();


void createTree();


void creatHaffCode();


void writeCompressFile();


void uncompress();


void ptf();
#include"T.h"
int main()
{
        writeCompressFile();
        uncompress();


}


void initHaffTree()
{
        for (int i = 0; i < 511; i++)
        {               
                HaffTree.parent = HaffTree.leftChild = HaffTree.rightChild = -1;
                HaffTree.weight=0;
                HaffTree.byte=0;
        }       
}


void Statistics()
{
        FILE *ifp;
        //printf("\t请你输入需要压缩的文件名: ");
        ////cin >> sourse_filename;//获取文件路径
        ifp = fopen(sourse_filename, "rb");
        if (ifp == NULL)
        {
                printf("\n\t文件打开失败!\n\n");
                system("pause");
        }
        //////////////////////////////////////////////////////////////////////////////////
        unsigned char c;//接收读取的一个字节
        while (!feof(ifp))
        {
                fread(&c, 1, 1, ifp);//从文件中读取一个字节到c
                HaffTree[c].weight++;
                file_length++;//统计源文件长度,每读一字节长度+1
        }
        file_length--;//原文件的长度多计算了一次
        HaffTree[c].weight--;

        /*cout

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!