我有一个 ASCII 编码的文本文件,其中每一行都具有以下结构:
\n\nXYplorer nn.nn.nnnn [yyyy-mm-dd hh.mm.ss] [S256 S256].zip\n \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91\xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91\xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x91\xe2\x86\x91 \xe2\x86\x9164\xc3\x97 \xe2\x86\x9164\xc3\x97\nRun Code Online (Sandbox Code Playgroud)\n\n所以一行有 177 个字符长,其中 27 个字符不变,另外 150 个字符不变,这两个哈希值组成了 128 个这样的字符。我还假设哈希值基本上是随机文本,因此难以压缩,所以
\n\n27/177 = 15.3%固定文本
22/177 = 12.4%改变文字
128/177 = 72.3%随机文本
然而,在 Windows 上以标准(右键单击)方式压缩此类文件(1854 行)时,我获得了 49% 的压缩率,这让我感到困惑,因为它似乎太高/高效了。
\n\n你能向我解释一下随机部分是如何被压缩这么多的吗?
\n小智 5
这里的关键要素是这是一个 ascii 编码的文件。
\n\n因此,每个字符都使用 8 位进行编码。\n177 \xc3\x97 8 = 每行 1416 位。然而,177 个字符不计入行结尾,在 Windows 中,行结尾被编码为“\\r\\n”(回车、换行),因此每行将使用 179 个字符,每行提供 1432 位。
\n\n您的 SHA256 每个都是 64 个十六进制数字。十六进制数字可以简单地压缩为仅使用 4 位 (2^4 = 16),即大小的一半。
\n\n让我们来分解一下:
\n\n单独使用该映射,我得到 128/2 + 22 = 86 字节或 688 位。
\n\n这没有考虑到可以对变化的文本执行任何额外的压缩,看起来它们通常是 ascii 数字,它们遭受与 ascii 十六进制数字相同的打包损失。
\n\n说实话,我很惊讶 Windows 压缩功能并没有做得更好。
\n| 归档时间: |
|
| 查看次数: |
1087 次 |
| 最近记录: |