문제

C에서 Huffman 알고리즘을 구현하고 있습니다. 이진 코드 워드가 얻는 지점까지 기본 기능을 가져 왔습니다. 예를 들어 ABCD는 100011000 또는 비슷한 것입니다. 이제 문제는 압축 파일 로이 코드를 이진 형식으로 어떻게 작성합니까? 내가 정상적으로 글을 쓰면 각각 1과 0은 하나의 문자가되므로 압축이 없다.

1과 0을 비트 형태로 써야합니다. C에서 가능합니까? 그렇다면 어떻게합니까?

도움이 되었습니까?

해결책

바이트를 채우기에 충분한 비트가있을 때까지 비트를 수집 한 다음 작성하십시오 ..

예 : 이와 같은 것 :

int current_bit = 0;
unsigned char bit_buffer;

FILE *f;

void WriteBit (int bit)
{
  if (bit)
    bit_buffer |= (1<<current_bit);

  current_bit++;
  if (current_bit == 8)
  {
    fwrite (&bit_buffer, 1, 1, f);
    current_bit = 0;
    bit_buffer = 0;
  }
}

비트를 쓰면 비트 버퍼를 플러시해야합니다. 그렇게하려면 current_bit이 0과 동일 할 때까지 비트를 씁니다.

void Flush_Bits (void)
{
  while (current_bit) 
    WriteBit (0);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top