2011-03-02 181 views
0

我的字符串中有340字節的數據主要由符號和數字組成,如「我想要的」「 」我想壓縮到250或更少的字節以將其保存在我的RFID卡上。由於此數據與指紋溫度有關。我想要無損壓縮。 那麼有什麼算法,我可以在C#中實現壓縮它?小字符串的壓縮

+4

您是否嘗試過基本的霍夫曼壓縮? http://en.wikipedia.org/wiki/Huffman_coding。不過,解壓縮表的空間需求可能會超出節省的空間。 – 2011-03-02 03:50:15

+0

壓縮算法沒有旋鈕,可以讓你說「我想*這*很多字節」。如果存在那麼當然每個人都會把它設置爲「1個字節」。壓縮這樣的少量字節是非常困難的。更重要的是,這是毫無意義的。 – 2011-03-02 06:02:27

回答

0

是否還有其他關於您的字符串的信息?例如,它是否比其他人更頻繁地包含某些字符?它是否包含全部255個字符或只是它們的一個子集?

如果是這樣,huffman編碼可能會幫助你,請參閱thisthis other link C#中的實現。

說實話,這取決於你的輸入字符串的樣子。我會做的是嘗試使用非常小的字典大小使用rar,zip,7zip(LZMA)(否則它們只會佔用太多空間用於預處理的信息)並查看它們產生的原始壓縮文件有多大(可能不得不使用他們的庫來使它們脫離頭部以節省空間)。如果他們中的任何一個產生250b以下的文件,那麼找到它的c#庫,然後你去。

1

如果數據是嚴格的數字和符號,我強烈建議將數字更改爲基於int的值。例如:

+ 12939272-23923 + 927392

可以是壓縮成3片的32位整數,其是22個字節=> 16個字節。選擇正確的整數大小(無論是32位,24位,16位)應該有所幫助。

如果整數大小變化很大,可以使用8位開始,並使用值255來指定下一個8位成爲整數的8個更重要的位,使其成爲15位。

或者,您可以識別最重要的字符併爲其指定0。第二個最重要的角色得到10,第三個110.這是一個非常粗糙的壓縮,但如果你的數據非常有限,這可能只是爲你做這項工作。