使用最基本的,“控制字节+重复次 数+重复字节”三个字节表达完成RLE压缩算法
void RLECompression(const char* src, char* dest)
{
char ChCount = 0; //扫描数量
char RepCount = 0; //重复次数
char DestCout = 0; //目标字符位置
char Ch = src[ChCount];
char ChTmp = Ch;
while(Ch != '\0')
{
if(ChTmp != Ch) //新的字符是否和记录的不一致
{
//如果重复次数大于等于4
if(RepCount >= 4)
{
//进行RLE压缩
dest[DestCout] = '*';
dest[DestCout+1] = RepCount;
dest[DestCout+2] = ChTmp;
DestCout += 3;
}
else //如果重复次数小于4
{
//简单将原串中的字符复制到目标串
for(int i = 0; i < RepCount; i++)
{
dest[DestCout] = src[ChCount-RepCount+i];
DestCout++;
}
}
ChTmp = Ch;
RepCount = 1;
}
else //新字符和记录的一致
RepCount++;
//取下一个字符
ChCount++;
Ch = src[ChCount];
}
//标记字符结尾
dest[DestCout] = '\0';
}
4654

被折叠的 条评论
为什么被折叠?



