资源简介
基于huffman编码的文件解压缩程序
采用c语言编写,支持文件的解压缩功能
供学习交流,大型文件请不要尝试,可能会很慢

代码片段和文件信息
#include“huffman.h“
//#include
static int get_file_name(char* destchar* srcint len);
char tmp_code[260];
static int search_code(struct huffman* hufPHNODE phnodechar codeint depth);
static int get_file_name(char* destchar* srcint dest_lenint src_len)
{
if(dest==NULL||src==NULL){
return 0;
}
int i=0;
for(i=src_len-1;i>=0;i--){
if(src[i]==‘\\‘){
break;
}
}
if(i==0){
return 0;
}
memset(dest0dest_len);
strncpy(dest&src[i+1]src_len-i-1);
return 1;
}
int huffman_inti(struct huffman* huf)
{
// huf->f_size=NULL;
memset(huf->file_path0strlen(huf->file_path));
huf->f_src=NULL;
for(int i=0;i!=256;i++){
huf->freq[i]=0;
for(int j=0;j!=265;j++){
huf->hf_table[i][j]=0;
}
}
prlist_inti(&huf->plist);
huf->huf_tree_head=NULL;
return R_OK;
}
int read_file(struct huffman* hufchar* path)
{
HANDLE h_file;
HANDLE h_filemap;
DWORD f_hsize;
void *src;
for(int i=0;i!=90;i++){
if(path[i]==‘\n‘){
path[i]=0;
}
}
//CString str_path(path);
// Create file kernel object
h_file= CreateFile (path GENERIC_READ|GENERIC_WRITE \
FILE_SHARE_READ|FILE_SHARE_WRITE NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL NULL ) ;
if ( h_file == INVALID_HANDLE_VALUE )
return RD_ERO;
// Get file size
huf->f_size= GetFileSize ( h_file &f_hsize ) ;
// Create file mapping object
h_filemap = CreateFileMapping ( h_file NULL PAGE_READWRITE 0 0 NULL ) ;
if ( h_filemap == NULL )
{
CloseHandle ( h_filemap ) ;
return false ;
}
src = MapViewOfFile ( h_filemap FILE_MAP_READ 0 0 f_hsize ) ;
if ( src == NULL )
{
CloseHandle ( h_filemap) ;
CloseHandle ( h_file ) ;
return false ;
}
huf->f_src=src;
strcpy(huf->file_pathpath);
huf->h_file=h_file;
huf->h_filemap=h_filemap;
return R_OK;
}
int stat_frequency(struct huffman* huf)
{
DWORD size=huf->f_size;
unsigned char* src=(unsigned char*)(huf->f_src);
for(DWORD i=0;i!=size;i++){
huf->freq[src[i]]++;
}
return R_OK;
}
int inti_prlist(struct huffman* huf)
{
static int j=0;
PHNODE phnode;
// PHNODE parray=(PHNODE)malloc(sizeof(PHNODE)*256);
PHNODE parray=huf->plist.pharray;
for(int i=0;i!=256;i++){
if(huf->freq[i]==0){
continue;
}
phnode=&(parray[j]);
j++;
phnode->mark=i;
phnode->value=huf->freq[i];
phnode->isleaf=1;
phnode->lnode=phnode->rnode=NULL;
prlist_insert(&(huf->plist)phnode);
}
return R_OK;
}
int build_huf_tree(struct huffman* huf)
{
PHNODE lnode;
PHNODE rnode;
PHNODE fnode;
static int i=256;
PHNODE parray=huf->plist.pharray;
while(huf->plist.size>1){
prlist_delete(&(huf->plist)&lnode);
prlist_delete(&(huf->plist)&rnode);
fnode=&(parray[i]);
i++;
// fnode=(PHNODE)malloc(sizeof(PHNODE));
fnode->mark=0;
fnode->isleaf=0;
fnode->lnode=lnode;
fnode->rnode=rnode;
fnode->value=lnode->value+rnode->value;
prlist_insert(&(huf->plist)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7805 2012-11-14 15:32 huffman\huffman.cpp
文件 28160 2012-11-14 15:39 huffman\huffman.exe
文件 588 2012-11-14 15:31 huffman\huffman.h
文件 1334 2012-11-14 15:39 huffman\main.cpp
文件 1772 2012-11-14 15:22 huffman\prlist.cpp
文件 299 2012-11-09 16:44 huffman\prlist.h
文件 1111 2012-11-14 15:31 huffman\typedefine.h
目录 0 2012-11-14 15:40 huffman
----------- --------- ---------- ----- ----
41069 8
- 上一篇:C语言电子表格
- 下一篇:socket文件传输C++
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论