ハフマン アルゴリズムを使用してファイル コンプレッサーを開発していますが、現在次のような問題に直面しています。
アルゴリズムを word: stackoverflow に使用すると、次の結果が得られます。
a,c,e,f,k,l,r,s,t,v,w = 1 time repeated
o = 2 times repeated
a,c,e,f,k,l,r,s,t,v,w = 7.69231%
and
o = 15.3846%
そのため、バイナリ ツリーへの挿入を開始すると、結果が得られます。
o=00
a=010
e=0110
c=0111
t=1000
s=1001
w=1010
v=1011
k=1100
f=1101
r=1110
l=1111
これは、ツリー内の文字のパスを意味し、0 を左、1 を右と見なします。
次に、「stackoverflow」という単語は次のようになります。
そして、その値全体をビット単位でバイナリファイルに入れたいのですが、結果として47ビットになり、たまたま6バイトになりますが、代わりに、fwriteでファイルに入れる最小値があるため、47バイトにすることしかできませんまたは、sizeof(something) を使用して fprintf を 1 バイトにします。
私の質問は次のとおりです。ファイルに1ビットだけ印刷するにはどうすればよいですか?