학교용 프로젝트로 커다란 프로그램을 만들어야하고 winzip/winrar와 같은 파일 압축에 대해 생각해 봤습니다. 알고리즘의 유형과 예제에 대해 읽었지 만 문제는 모든 예제가 알파벳 문자열 에 대한 구현을 나타내고 있으며 파일이 문자열이 아니기 때문에 도움이되지 않는다는 것입니다.이 문자열은 연속 된 0과 1로 구성되어 있습니다. 예를 들어 파일이있는 경우 "0111000110111001" 어떻게 압축합니까?바이너리 숫자 압축
답변
예를 들어 컴퓨터 수준에서 알파벳 문자열을 사용하는 경우에도 여전히 0과 1의 연속입니다.이 예제를 이진 파일에 적용하려면 바이트 단위로 읽을 수 있습니다. 또는 한 단어 씩. 이 방법으로, 알파벳 문자열에 대해 본 것은 여전히 사용할 수 있습니다.
나는 뭔가를 놓친 것처럼 느껴진다. 나는 파일을 보았다. 궁극적으로 다소 메모리에 저장된 0과 1의 연속이다. 파일에 비트가 많을수록 크기가 커집니다. 압축의 모든 예는 알파벳/숫자 문자열에 대해 이야기하고 더 짧은 알파벳/숫자 코드로 압축하는 방법을 보여 주지만 이진 연속으로 시도했을 때 크기가 길어질수록 크기가 더 커집니다. 파일의 비트를 가져 와서 연속 길이를 실제보다 짧게하고 크기가 더 작아 지길 원합니다. –
어떻게 파일을 읽습니까? Byte by byte? 아니면? 어떤 종류의 압축을 사용합니까? 대부분의 경우 문자열을 압축하는 메서드는 이진 파일을 압축하는 데 적합하지 않습니다. –
내가 아는 유일한 방법은 바이트 이후에 바이너리 파일 Byte를 읽는 것입니다. 그러나 여전히 파일에서 단일 바이트를 읽었을 때 어떻게 압축 할 수 있습니까? 지금은 C 언어를 사용하여 이진 파일을 읽었습니다.하지만 "fread"및 "fwrite"매개 변수가 바이트로 최소 크기를 받아들이므로 어쩌면 Word (16 비트)를 읽고 압축하려고합니다. 그것은 Byte로하지만 이진 시스템에서 알고리즘을 구현하는 방법을 모르겠습니다. –
0 또는 1의 연속으로 무엇을 의미합니까? "0"과 "1"문자의 연속을 의미합니까? 값이 0 또는 1 인 바이트 또는 일련의 비트? 이러한 값으로 표현되는 데이터 구조는 무엇입니까? – trincot