/*
@parm : dest - 압축 해제된 데이터가 기록될 버퍼 포인터
@parm : destLen - 압축 해제된 데이터의 사이트가 리턴된다.
@parm : source - 압축 해제될 원본 버퍼의 포인터
@parm : sourceLen - 압축된 버퍼의 byte 크기.
압축 함수와는 달리 , 해제에는 커스텀 설정이 그리 존재하지 않기 때문에 하나의 함수만 존재
uncompress 함수는 성공과 실패의 리턴값이 compression 과 같다.
*/
int uncompress(Bytef *dest,
uLongf *destLen,
const Bytef *source,
uLongf sourceLen);
int main() {
FILE *FileIn = fopen("FileOut.dat", "rb");
//출력 파일
FILE *FileOut = fopen("OrigFile.bmp", "wb");
// 입력파일의 사이즈를 구한다.
fseek(FileIn, 0, SEEK_END);
unsigned long FileInSize = ftell(FileIn);
//raw 데이터와 압축해제될 데이터의 버퍼 생성
void *RawDataBuff = malloc(FileInSize);
void *UnCompDataBuff = NULL;
//원본 버퍼로부터 파일 데이터를 읽는다.
fseek(FileIn, 0, SEEK_SET);
fread(RawDataBuff, FileInSize, 1, FileIn);
// 압축을 풀수 있을 정도의 버퍼 크기를 할당한다. 우린 원본의 크기를 알기땜에 걍 잡았다.
uLongf UnCompSize = 482000;
UnCompDataBuff = malloc(UnCompSize);
// 필요한 작업은 준비됐으니 소스 버퍼로부터 압축을 한다(uncompress가 아닐까?). 해제된 사이즈는 UnCompSize 에 기록될 것이다. (이부분도 좀 이상)
//all data we require is ready so compress it into the source buffer, the exact size will be stored in UnCompSize
uncompress((Bytef*)UnCompDataBuff, &UnCompSize, (const Bytef*)RawDataBuff, FileInSize);
//해제된 데이터를 디스크에 기록한다.
fwrite(UnCompDataBuff, UnCompSize, 1, FileOut);
return 0;
}
ZLIB 로 메모리에 압축 하기 (0) | 2021.01.06 |
---|---|
Lempel-Ziv 알고리즘 (0) | 2018.09.04 |
GZIP 구조 (0) | 2017.10.14 |
Run Length Encoding(1) (0) | 2017.10.14 |
PKZIP 구조(2) (0) | 2016.01.19 |
댓글 영역