《C语言课程设计》实验报告-RLE压缩解压算法.pdf
饭疏食,饮水,曲肱而枕之,乐亦在其中矣。不义而富且贵,于我如浮云。——《论语》
《C语言课程设计》实验报告
一、问题描述
题目4:RLE压缩解压算法
涉及知识点:文件读写、位操作、内存管理、结构体定义、RLE算法、命令
行参数
要求:编写一个程序,可以在命令行输入参数,完成指定文件的压缩解压
命令行参数如下
rlefile1–c(-d)file2
第一个参数为可执行程序名称,第二个参数为原始文件名,第三个参数为压
缩或解压缩选项,第四个参数为新文件名
说明:
通过该练习,学生需要掌握:
(1)文件操作
(2)位操作
(3)RLE算法(相关算法可以查阅资料,我们这里要求数据都是1个字节
作为单位长度的)
二、技术关键点分析
1.读取原始文件
FILE*f1;
FILE*f2;
f1=fopen(argv[1],);
if(f1==NULL){
printf(找不到这文件);
return0;
}
intt=0;
inta=0;
//读取文件
while((a=fgetc(f1))!=EOF){
file_src[t++]=a;
}
f2=fopen(argv[3],);
intsize=t;
printf(输入字符数,size);
2.选择解码还是编码
if(strcmp(argv[2],)==0){
size=RLEdecode(file_src,size,file_dst,MAX_CHAR);
printf(输出字符数,size);
}elseif(strcmp(argv[2],)==0){
size=RLEencode(file_src,size,file_dst,MAX_CHAR);
饭疏食,饮水,曲肱而枕之,乐亦在其中矣。不义而富且贵,于我如浮云。——《论语》
printf(输出字符数,size);
}
3(1)解码
//RLE解码算法,正好是编码算法的反过程
intRLEdecode(unsignedchar*src,intsrc_len,unsignedchar*
dst,intdst_len)
{
unsignedchar*data=src;
intleft=src_len;
intpoint=0;//输出缓冲区指针
while(d