自己用c写了个rle压缩编码算法,代码写得不那么简洁,但是基本功能是实现的,用C写能更好地兼容嵌入式
/*
行程压缩算法V1.0
made by xyt
2015/7/4
*/
#ifndef _RLE_H
#define _RLE_H
#include<stdio.h>
using namespace std;
//判断是否三个相同值
bool IsRepeat3(unsigned char *in,int rest)
{
if(rest<2) return false;
else{
if(*in==*(in+1)&&*in==*(in+2)) return true;
else return false;
}
}
/* 获取非重复个数,个数为包括判决项直到后面
第一次三连重复的(三重复第一点不算)的个数 */
int GetNoRepeat3(unsigned char *in,int rest)
{
if(rest<=2) return rest+1;
else{
int c=0,restc=rest;
unsigned char *g=in;
while(!IsRepeat3(g,restc))
{
g++;restc--;c++;
if(restc==0) return c+1;
}
return c;
}
}
/* 数据压缩,返回压缩后数据大小 */
int Rle_Encode(unsigned char *inbuf,int insize,unsigned char *outbuf1,int outsize)
{
unsigned char *src=inbuf;
unsigned char *outbuf=