備忘錄 壓縮整數及其解壓縮

2022-01-31 19:03:15 字數 759 閱讀 6618

原創:anders liu

本文已過時,請參見《.net/cli元資料中使用的壓縮整數》:

摘要:.net/cli的pe檔案中廣泛採用了一種整數壓縮演算法,這種演算法可以將乙個32位無符號整數根據其大小放置在1、2或4個位元組中。本文介紹了這種壓縮演算法,並給出了解壓縮的參考實現。

ecma-335——common language infrastructure (cli) 4th edition, june 2006

本文介紹的整數壓縮演算法針對的是0x00000000~0x1fffffff之間的32位無符號整數,將這些整數劃分成了3個區間[0x00000000~0x0000007f]、[0x00000080~0x00003fff]、[0x000040000~0x1fffffff],分別用1、2和4個位元組存放。大於0x1fffffff的32位無符號整數不適合用該演算法壓縮。

該演算法廣泛應用在.net/cli pe檔案中,例如各種元資料簽名、#blob和#us流等。使用概演算法的目的是減小磁碟檔案的大小和降低頻寬開銷,因為.net程式集的目標是通過網路執行。應用概演算法的場合主要有資料的大小和資料條目的數量等方面,在這些方面,乙個整數的值通常不會太大,因此概演算法節省的位元組數量是很可觀的。

圖1更為直觀地展示了區間的劃分。

圖1 - 整數壓縮演算法

清單1 - 解壓縮演算法參考實現(c#描述)

eof.

壓縮解壓縮

壓縮 壓縮後的檔名 包含物理路徑 待壓縮的資料夾 包含物理路徑 public static void packfiles string filename,string directory catch exception 解壓縮 待解壓檔名 包含物理路徑 解壓到哪個目錄中 包含物理路徑 public ...

壓縮 解壓縮

linux使用最廣泛的壓縮格式位gz,使用gzip命令進行壓縮和解壓縮 1 gzip,gunzip,壓縮 解壓縮檔案,compress or expand files gzip acdfhkllnnrtvv19 s suffix name gunzip acfhkllnnrtvv s suffix ...

Linux 壓縮 解壓縮

1.以.a為副檔名的檔案 tar xv file.a 2.以.z為副檔名的檔案 uncompress file.z 3.以.gz為副檔名的檔案 gunzip file.gz 4.以.bz2為副檔名的檔案 bunzip2 file.bz2 5.以.tar.z為副檔名的檔案 tar xvzf file....