簡體   English   中英

霍夫曼編碼

[英]huffman encoding

我正在嘗試實現壓縮的霍夫曼算法,這需要將可變長度的位寫入文件。 在C ++中是否有任何方法可以將1位粒度的可變長度數據寫入文件?

不,您可以寫入文件的最小數據量是一個字節。

您可以使用bitset使操作位更容易,然后使用ofstream寫入文件。 如果您不想使用bitset,則可以在保存數據之前使用按位運算符來操作數據。

您可以訪問和保存的最小位數是8 = 1個字節。 您可以使用位運算符^和|來訪問字節中的位。

您可以使用以下命令將第n位設置為1:

my_byte = my_byte | (1 << n);

其中n為0到7。

您可以使用以下命令將第n位設置為0:

my_byte = my_byte & ((~1) << n);

您可以使用以下方式切換第n位:

my_byte = my_byte ^ (1 << n);

更多細節在這里

klew的答案可能就是你想要的答案,但只是為了添加Bill所說的內容,Boost庫有一個dynamic_bitset ,我發現它在類似的情況下很有幫助。

在twiddling上你需要的所有信息都在這里:
你如何設置,清除和切換一個位?

但是,您可以放入文件的最小對象是一個字節。
我會使用dynamic_bitset,每次大小超過8時,將底部的8位提取到char中並將其寫入文件,然后將剩余的位向下移動8位(重復)。

不,你必須打包字節。 因此,您需要在文件中使用一個標頭來指定文件中有多少元素,因為您可能會使用未使用的尾隨位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM