[英]huffman encoding
我正在嘗試實現壓縮的霍夫曼算法,這需要將可變長度的位寫入文件。 在C ++中是否有任何方法可以將1位粒度的可變長度數據寫入文件?
您可以訪問和保存的最小位數是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.