C90中的RLE压缩和解压缩实现

时间:2018-05-31 00:34:06

标签: c encoding compression

我有点坚持在if语句中实现各种条件,以打印出正确的RLE压缩输出。

一半工作但输出错误的结构。

这是输入文件“AAAAAA333333FFFFF22222”中的字符,但这是压缩输出:“2536A6F5”,输出应为“6A635F52”。

可能有人在我的if声明中提示我需要添加的内容,以便正确打印出来吗?

也可以有人给我提示实现RLE解压缩(解码)吗?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main (void)
{
    int count[256] = { 0 };
    int n;
    int p;
    FILE * fp;
    FILE * fptr;
    fp = fopen("test.txt", "r");
    fptr = fopen("compressed_test.txt", "w");

    if (fp == NULL)
    {
        printf("Error file doesn't exist\n");
        printf("Nothing to compress\n");
        exit(0);

    }   

    while((n=fgetc(fp)))
    {
        if(n == EOF)
        {
            break;
        }   
        else
        count[n]+=1;
    }

    for (p=0; p < 256; p++)
    {
        if (count[p] > 0)
        {
            fprintf(fptr, "%c%d", p, count[p]);
            printf("Compression completed successfully\n");
        }
    }

    fclose(fp);
    fclose(fptr);
    return 0;
}

0 个答案:

没有答案