2017-11-18 14 views
0

학교용 프로젝트로 커다란 프로그램을 만들어야하고 winzip/winrar와 같은 파일 압축에 대해 생각해 봤습니다. 알고리즘의 유형과 예제에 대해 읽었지 만 문제는 모든 예제가 알파벳 문자열 에 대한 구현을 나타내고 있으며 파일이 문자열이 아니기 때문에 도움이되지 않는다는 것입니다.이 문자열은 연속 된 0과 1로 구성되어 있습니다. 예를 들어 파일이있는 경우 "0111000110111001" 어떻게 압축합니까?바이너리 숫자 압축

+0

0 또는 1의 연속으로 무엇을 의미합니까? "0"과 "1"문자의 연속을 의미합니까? 값이 0 또는 1 인 바이트 또는 일련의 비트? 이러한 값으로 표현되는 데이터 구조는 무엇입니까? – trincot

답변

0

예를 들어 컴퓨터 수준에서 알파벳 문자열을 사용하는 경우에도 여전히 0과 1의 연속입니다.이 예제를 이진 파일에 적용하려면 바이트 단위로 읽을 수 있습니다. 또는 한 단어 씩. 이 방법으로, 알파벳 문자열에 대해 본 것은 여전히 ​​사용할 수 있습니다.

+0

나는 뭔가를 놓친 것처럼 느껴진다. 나는 파일을 보았다. 궁극적으로 다소 메모리에 저장된 0과 1의 연속이다. 파일에 비트가 많을수록 크기가 커집니다. 압축의 모든 예는 알파벳/숫자 문자열에 대해 이야기하고 더 짧은 알파벳/숫자 코드로 압축하는 방법을 보여 주지만 이진 연속으로 시도했을 때 크기가 길어질수록 크기가 더 커집니다. 파일의 비트를 가져 와서 연속 길이를 실제보다 짧게하고 크기가 더 작아 지길 원합니다. –

+0

어떻게 파일을 읽습니까? Byte by byte? 아니면? 어떤 종류의 압축을 사용합니까? 대부분의 경우 문자열을 압축하는 메서드는 이진 파일을 압축하는 데 적합하지 않습니다. –

+0

내가 아는 유일한 방법은 바이트 이후에 바이너리 파일 Byte를 읽는 것입니다. 그러나 여전히 파일에서 단일 바이트를 읽었을 때 어떻게 압축 할 수 있습니까? 지금은 C 언어를 사용하여 이진 파일을 읽었습니다.하지만 "fread"및 "fwrite"매개 변수가 바이트로 최소 크기를 받아들이므로 어쩌면 Word (16 비트)를 읽고 압축하려고합니다. 그것은 Byte로하지만 이진 시스템에서 알고리즘을 구현하는 방법을 모르겠습니다. –