2010-08-08 129 views
2

我有一個10345字節的數組,我想壓縮數組然後解壓,好心的建議我可以減小數組大小的壓縮算法。我使用的是c語言,而數組是無符號字符類型。數組壓縮算法

改編:有人可以爲C/C++推薦一個通用壓縮算法(或庫)嗎?

+0

投票結束:不是真正的問題。 – 2010-08-08 16:34:32

+1

@希思,真正的問題是什麼? – Siddiqui 2010-08-08 16:35:04

+3

@海瑟:你今天看起來有點癢。 – 2010-08-08 16:35:41

回答

8
+0

-1你不知道他的數據是什麼。 – 2010-08-08 16:37:50

+6

+1,zlib不關心他的數據是什麼。 – 2010-08-08 16:42:18

+1

@SigTerm - 哦,它是無符號字符。我想這意味着unsigned char數組的內容可以被Zlib壓縮。天哪,我不知道。 – 2010-08-08 16:44:46

3

這個職位是一個社區的wiki。我不想爲此提出任何意見 - 我已經投票決定結束這個問題。

要壓縮的字節數與選擇壓縮算法很少有關,儘管它確實會影響實現。例如,當您壓縮的字節數少於2^15個字節時,如果使用ZLib,則需要指定小於15的壓縮級別。Zlib(兩個此類參數之一)中的壓縮級別控件「回顧」字典的深度。如果你的文件短於16k字節,那麼32k的回溯字典永遠不會半滿;在這種情況下,與將ZLib設置爲「max」相比,在壓縮的1/15邊緣使用少一點的指針進入回看。

數據的內容是重要的。如果您發送的圖像大部分是背景,那麼您可能需要運行長度編碼(例如,Windows .BMP使用)。

如果你發送的主要是英文文本,比你希望你可以使用類似ZLib的,它實現了霍夫曼編碼和LZW風格的回溯字典壓縮。

如果您的數據已被加密,然後試圖壓縮它將不會成功。

如果您的數據是特定類型的信號,並且您可以容忍某些細節丟失,那麼您可能希望將其轉換爲頻率空間並僅發送主要組件。 (例如,JPEG,MP3)

+0

所以你投票結束,然後提交答案?混淆最好的希思。 – 2010-08-08 17:00:02

+1

@Josh - 我的回答本質上是對*爲什麼*我投票結束的解釋。如果你閱讀我的答案,你會發現它非常模糊和一般。因爲對這個問題的任何回答都需要。 OP甚至沒有說明他是否想要無損,儘管這是一個公平的假設...... – 2010-08-08 17:09:05

+0

@Heath:那麼這應該是一個評論,因爲它不是**答案(根據我的判斷和你的承認)。 – 2010-08-08 17:14:33