Its*_*tMe 1 javascript algorithm inflate
即使在阅读RFC并查看c和javascript实现之后,我也很难理解inflate算法的工作原理.我使用文本"TestingTesting"压缩了一个文件,并以十六进制获得了以下结果:0B 49 2D 2E C9 CC 4B 0F 81 50 00
我尝试在16位和32位字节序交换后读取数据,但在读取前3位后我无法再进一步,因为接下来的5位没有意义.我做错了什么,如何解析?
我使用过的参考资料:RFC 1951 Javascript C.
Mat*_*ery 10
压缩器的输出是一个字节流.你为什么要进行端点交换?
查看前几个字节,作为二进制:
0B = 00001011
49 = 01001001
2D = 00101101
2E = 00101110
...
Run Code Online (Sandbox Code Playgroud)
从RFC中的3.1.1节:
从右到左读取位,因此标题的第一位BFINAL
是1
:
00001011
^
Run Code Online (Sandbox Code Playgroud)数字包装LSB首先,我们从右到左,所以阅读BTYPE
是01
:
00001011
^^
Run Code Online (Sandbox Code Playgroud)那是固定的霍夫曼代码块类型,所以我们接下来会期待一个霍夫曼代码.霍夫曼代码首先打包MSB,所以第一个代码是10000100
(我们继续到下一个字节):
00001011
^^^^^
01001001
^^^
Run Code Online (Sandbox Code Playgroud)在节3.2.6看着该表中,00110000
对10111111
表示文字字节0 - 143,所以10000100
(= 0x84
)是文字值0x54
,其是ASCII码为" T
".
继续,下一个代码是10010101
(= 0x95
),它是字面值0x65
,即" e
".
...等等.
归档时间: |
|
查看次数: |
859 次 |
最近记录: |