/ Published in: C
URL: http://en.wikipedia.org/wiki/Run-length_encoding
Encode and decode RLE from files
Expand |
Embed | Plain Text
int rle_encode_file (FILE * in, FILE * out) { int block_len, block_char, c; block_len = 0; block_char = -1; for(;;) { c = getc(in); if (c == EOF) break; if (c == block_char && block_len < 255) { /* same block */ block_len++; } else { if (block_len) { /* write block */ putc(block_len, out); putc(block_char, out); } /* start new block */ block_len = 1; block_char = c; } } if (block_len) { /* last block */ putc(block_len, out); putc(block_char, out); } return 1; } int rle_decode_file (FILE * in, FILE * out) { int i, len, c; for(;;) { len = getc(in); /* block length */ c = getc(in); /* character */ /* checking */ if (len == EOF) return 1; /* end of file */ if (c == EOF) return 0; /* bad format */ /* output */ for(i = 0; i < len; i++) putc(c, out); } }
You need to login to post a comment.
