簡體   English   中英

如何使用霍夫曼代碼壓縮文件?

[英]How to Use Huffman code for compress file?

我的程序將霍夫曼代碼存儲在char[8]變量中。 我想將它存儲在一個unsigned char變量中。 我這樣做了,但認為它不能正常工作,因為當我使用以下代碼提取文件時,它不起作用:

unsigned char bit2byte ( unsigned char bits[8] ) {
    unsigned char x = 0; 

    for ( int k = 0; k < 8; k++ ) {
        if ( bits[k] == '1' ) 
            x = x | 1;

        x <<= 1; 
    }

    return x; 
}

這條線怎么樣:

if ( bits[k] == '1' ) 

bits數組是否將您的位存儲為 ASCII 字符或數字值,即如果您嘗試會發生什么

if ( bits[k] == 0x01 )

您可能會因為無法讀懂您的想法而對我投反對票...

Huffman 是一種壓縮方案,如果您想讀取 Huffman 編碼文件,您最可能希望對其進行解碼(即解壓縮)

http://en.wikipedia.org/wiki/Huffman_coding

在霍夫曼編碼數據中,每個字符都表示為可變位數,因此您不能通過簡單地傳遞文件的固定部分來處理文件,期望在每次調用中返回一個字節 - 您必須保留 state每次調用消耗了多少位,以及從 stream 位開始處理以提取下一個字節。

要正確解碼 Huffman 數據,您將需要編碼樹(參見 wikipedia 鏈接)——這棵樹很可能也存儲在文件中——所以實際上你的文件很可能有兩個部分:(1)編碼/解碼樹,以及 (2) 數據——如何存儲在文件中是特定於實現的,因此在嘗試解碼任何內容之前,您首先需要該規范。

希望這可以幫助。

我不清楚您所說的“不起作用”是什么意思,但可能是您需要 go 以另一種方式。

for (int k = 7; k >= 0; k--) {

和以前一樣。

當然,我也不知道為什么你曾經使用 8 個字節來只存儲 8 位信息。

暫無
暫無

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

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