سؤال

أقوم بتنفيذ خوارزمية Huffman في C. لقد حصلت على الوظيفة الأساسية لأسفل إلى النقطة التي يتم فيها الحصول على codewords الثنائية. لذلك على سبيل المثال، ستكون ABCD 100011000 أو شيء مماثل. الآن السؤال هو كيف تكتب هذا الرمز في النموذج الثنائي في الملف المضغوط. أعني إذا كنت أكتبها عادة كل 1 و 0 سيكون حرفا واحدا حتى لا يكون هناك ضغط.

أحتاج إلى كتابة تلك 1S و 0S في شكل بت. هل هذا ممكن في 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;
  }
}

بمجرد الانتهاء من كتابة البتات، عليك أن تدفع المخزن المؤقت قليلا. للقيام بذلك فقط اكتب البتات حتى يساوي arient_bit إلى الصفر:

void Flush_Bits (void)
{
  while (current_bit) 
    WriteBit (0);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top