c笔记——行程长度编码

之前写过哈弗曼编码的压缩文件的程序,今天在书上看到一个更简单用途单一的压缩算法:行程长度编码

如果文件包含许多相同字节的长序列,效果很明显,实现代码如下

#include
#include
int main(int argc,char** argv){
	if(argc==3){
		FILE* src=fopen(argv[1],"rb");
		FILE* out=fopen(argv[2],"wb");
		if(!src||!out){
			printf("open err\n");
			remove(argv[2]);
		}
		char newname[256];
		strcpy(newname,argv[2]);
		strcpy(newname+strlen(argv[2]),".ra");
		char ch,temp;
		int num=0;
		fread(&ch,1,1,src);
		while(fread(&temp,1,1,src)){
			if(ch==temp)
				num++;
			else{
				fwrite(&num,sizeof(int),1,out);
				fwrite(&ch,sizeof(char),1,out);
				num=0;
				ch=temp;
			}
		}
		fwrite(&num,sizeof(int),1,out);
		fwrite(&ch,sizeof(char),1,out);

		if(ftell(src)>=ftell(out)){
			fclose(src);
			fclose(out);
			rename(argv[2],newname);
		}
		else{
			fclose(src);
			fclose(out);
			remove(argv[2]);
			printf("faile\n");
		}
		}
	else
		printf("eg:comp file1 file2\n");

}



你可能感兴趣的:(C/C++)