/* Runlength encoder - wacco * Public domain */ #include void rle_encode(FILE *in, FILE *out) { char prev = fgetc(in), cur = fgetc(in); unsigned char n = 0; if(cur == EOF) { if(prev != EOF) fputc(prev, out); return; } if(prev == cur) n++; prev = cur; while((cur = fgetc(in)) != EOF) { if(prev == cur && n != 255) n++; else { fputc(prev, out); if(n) { fputc(prev, out); fputc(n - 1, out); } n = 0; } prev = cur; } fputc(prev, out); if(n) { fputc(prev, out); fputc(n - 1, out); } } int main() { FILE* input; FILE* output; input = fopen("input.hex", "r"); output = fopen("output.hex", "w"); rle_encode(input, output); return 0; }