0
16 진수 값으로 구성된 파일을 런 - 길이 코드로 압축하는 프로그램을 작성 중입니다. 예를 들어, 파일을 주어진 :C에서 파일을 런 - 길이 코드로 압축하는 프로그램
46 6f 6f 20 62 61 72 21 21 21 20 20 20 20 20
내 코드는 다음 파일을 생성한다 :
01 46 02 6f 01 20 01 62 01 61 01 72 03 21 05 20
내가 작성한 프로그램이 걸리면 왜 모르겠어요. 어떤 도움을 주시면 감사하겠습니다.
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
int main(void){
int a, b, c, count=1, flag=TRUE;
FILE *file;
FILE *out;
file = fopen("input.txt", "r");
if(file){
out = fopen("input.txt.out", "a");
fscanf(file, "%x", &a);
while(fscanf(file, "%x", &c)){
while(flag==TRUE){
if(c==a){
count= count+1;
}else{
flag = FALSE;
}
b=a;
a=c;
}
fprintf(out, "%d %02x ", count, b);
count = 1;
flag = TRUE;
}
}else{
printf("ERROR: file not found.");
}
}
EDIT :! feof (file) 인수를 제거하고 대신 실제 I/O 함수로 바꾸는 코드를 업데이트했습니다. 통찰력에 감사드립니다. 그러나, 내 프로그램은 여전히 작동하지 않습니다.
큰 출력을 어떻게 "압축"으로 간주 할 수 있습니까? –
[while (! feof (fp))은 항상 잘못됨] (https://stackoverflow.com/questions/5431941) – user3386109
대부분의 경우 압축 방법이 좋지 않습니다. 반복되는 입력의 긴 부분이있는 경우에만 잘 작동합니다. 반복이 없으면 파일의 크기는 실제로 두 배가됩니다. 입력이 6f 6f 6f 6f 6f 6f 01 01 01 01 인 경우 출력은 06 6f 04 01 이고 파일을 원본 크기의 40 %로 줄입니다. 효과는 입력에 따라 다릅니다. –