Skip to content

Instantly share code, notes, and snippets.

@oguz-ismail
Created May 11, 2023 07:24
Show Gist options
  • Save oguz-ismail/dd46214b556b24597bbaa508370e9d84 to your computer and use it in GitHub Desktop.
Save oguz-ismail/dd46214b556b24597bbaa508370e9d84 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <limits.h>
int
rle_encode(FILE *src, FILE *dest) {
int c, prev, cnt;
prev = fgetc(src);
cnt = 1;
while (prev != EOF) {
c = fgetc(src);
if (c != prev || cnt == UCHAR_MAX) {
fputc(cnt, dest);
fputc(prev, dest);
prev = c;
cnt = 0;
}
cnt++;
}
return ferror(src);
}
int
rle_decode(FILE *src, FILE *dest) {
int c, cnt, i;
while ((cnt = fgetc(src)) != EOF && (c = fgetc(src)) != EOF)
for (i = 0; i < cnt; i++)
fputc(c, dest);
return ferror(src);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment