나는 C에서 ASCII 문자로 읽는 사용자 정의 압축 알고리즘을 작성하고 있으며, 항상 0이기 때문에 각각의 첫 번째 비트를 제거한 다음 새 파일에 고정합니다. 그것은 7/8의 입력을 원래 크기로 만듭니다.사용자 정의 압축 알고리즘
#include <stdio.h>
int main()
{
int i = 1;
int c;
unsigned short value = 0;
while((c = getchar()) != EOF)
{
value = (c << i) | value;
if(i != 1) putchar(value >> 8);
value = value << 8;
i++;
if(i == 9) i = 1;
}
if(i != 1) putchar(value >> 8);
}
을 여기에 압축 해제입니다 : 여기에 압축이다, 출력은 "orororor.r이
#include <stdio.h>
int main() {
int i = 1;
int c;
unsigned char value = 0;
while((c = getchar()) != EOF) {
value = (c >> i) | value;
putchar(value);
value = (c << (8-i)) | 0;
value = value >> 1;
if(++i == 8) {
putchar(value);
i = 1;
}
}
}
내가 (따옴표없이)"ororororor "같은 것을 압축하고 압축을 해제하는 경우입니다 ",". " 16 진수는 7F입니다. 그러나, "ororororrr"을 주면 올바른 "ororororrr"을 출력합니다. 특정 입력에 대해서만 실패하지만 패턴이 엉망인 경우에는 찾을 수 없습니다.
죄송합니다. 기능 상 불편을 끼쳐 드려 죄송합니다. 필자가 사용하고있는 방법은 다음과 같은 명령을 사용하는 UNIX에서입니다.
echo -n your input here > data
gcc compress.c
./a.out <data> inp
gcc decompress.c
./a.out <inp> out
hexdump -C out
를 해결한다 :
테스트 케이스 (상기 프로그램은 단지 제로 명령 행 인수 있었다면
value
을 수정)! 나는 그것이'value = c << 8-i | 0 '그것은 그것과 0을 ORS하지만 그것은 8 번째 문자를 올바르게 지우지 않았던 것 같습니다. – mottese