推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

文件压缩c语言程序代码,C语言程序设计之RLE压缩解压算法

   2023-07-28 网络整理佚名970
核心提示:原始图像文件的数据有一个特点,那就是有大量连续重复的颜色数据,RLE正好是用来压缩有大量连续重复数据的压缩编码,但对于其他二进制文件而言,由于文件中相同的数据出现概率较少,使用RLE压缩这些数据重复性不强的文件效果不太理想,有时候压缩后的数据反而变大了。(感觉仔细看了上面两个内容后就不用再过多解释了,代码里面有压缩函数的注释,解压和其相似就没有再写)

首先介绍一下RLE压缩算法:

游程编码(Run-,RLE)又称游程编码或变长编码,是控制理论中的一种二值图像的编码方法,用不同的码字对连续的黑白像素进行编码。 游程编码是一种简单的无损压缩方法,其特点是压缩和解压缩速度非常快。 这种方法就是简单地用重复字节和重复次数来描述重复字节,即将一系列连续的相同数据转换成特定的格式,以达到压缩的目的。

RLE是一种简单的压缩算法,主要用于压缩图像中连续重复的颜色块。 当然,RLE不仅仅适用于图像压缩,RLE可以压缩任何二进制数据。 原始图像文件的数据有一个特点,即存在大量连续重复的颜色数据。 RLE只是用来压缩大量连续重复数据的压缩代码,但是对于其他二进制文件,由于文件中出现相同数据的概率较少,使用RLE压缩这些重复性较小的文件的效果数据并不理想,有时压缩后的数据反而变大。

RLE压缩方案是一种极其成熟的压缩方案,其特点是无损压缩。

然后通过阅读这篇博客了解了文件的一些基本操作

最后直接上代码

(感觉仔细看完上面两个内容,就不需要过多解释了,代码中压缩函数都有注释,解压也类似,就不再写了)

#

#

#

无效拉链(字符*,字符*)

{//压缩函数

文件*输入,*输出;

整数;

炭电流,tmp;

if(!(in=fopen(,"rb")))//以二进制方式打开只读文件(原文件必须存在)

("打开文件失败\n");//如果文件不存在则提示

别的

out=fopen(,"wb");

cur=fgetc(in);//读取一个字符,返回读取到的字符,读取到文件末尾时返回EOF

tmp=cur;

=1;

while(!feof(in))

cur = fgetc(in);

如果(cur==tmp){

++;

}//RLE压缩

别的 {

fputc(+'0',out);//写入一个字符(这里是计数),如果失败,返回EOF

fputc(tmp,out);//同上,这里是原始字符

tmp=cur;

=1;

(在);

(out);//关闭文件

无效解压缩(字符*,字符*)

{//解压函数,注释会和上面基本一样,不再赘述

文件*输入,*输出;

整数;

炭电流;

if(!(in=fopen(,"rb")))

(“打开文件失败\n”);

别的

输出 = fopen(,"wb");

while(!feof(in)){

= fgetc(in)-'0';

if(feof(in)) 中断;

cur = fgetc(in);

尽管( - )

fputc(cur,输出);

(在);

(出去);

int main(int argc,char *argv[])

{//通过判断命令行参数进行相应的操作

if(!(argv[2], "-d"))

解压(argv[1],argv[3]);

(“\n”);

否则 if(!(argv[2],"-c"))

zip(argv[1], argv[3]);

(“\n”);

别的

("输入参数错误,请重新检查,-c:;-d:\n");

0;

标签: 解压, cur, RLE, 压缩, argv, C语言, out

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON