【发布时间】:2022-01-08 13:40:23
【问题描述】:
我正在验证一个进行解压缩(膨胀)的硬件设计模块。解压缩的数据输出应始终为 4 KiB。作为测试数据,我使用 zlib 的 deflate 一次压缩 4 KiB 数据块,并将其作为输入提供给我的测试。我进行了多次回归,但我从未观察到代码长度为 15 的情况。您对如何得到它有什么建议,或者为什么它不可能?
【问题讨论】:
我正在验证一个进行解压缩(膨胀)的硬件设计模块。解压缩的数据输出应始终为 4 KiB。作为测试数据,我使用 zlib 的 deflate 一次压缩 4 KiB 数据块,并将其作为输入提供给我的测试。我进行了多次回归,但我从未观察到代码长度为 15 的情况。您对如何得到它有什么建议,或者为什么它不可能?
【问题讨论】:
给你:
eF4F4cGBZdmybbnJijFt7eOR931S/14B////3//7f//v//7v//7vf//73//+97///ffff//9
999///3333///v379+/fv3///v379+/fv3///v39/f39/f39/f39/f39/f39/f39/f39/f39
/f39/X6/3+/3+/1+v9/v9/v9fr/f7/f7/X6/3+/3+/1+v9/v9/v9fr/f7/f7vu/7vu/7vu/7
vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu9777333nvv
vffee++9995777333nvvvffee++9995777333nvvvffee++9995777333nvvvffee++99957
77333nvvvffee++99957793d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d
3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d
3d3d3d3d3d22bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2
bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2
bdu2bdu2bdu2bdu2bdu2bdu2bdtWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA8P8BVoseLg==
这是 zlib 流的 Base64 编码,解压缩为 4096 字节,具有 15 位符号。它是通过生成卢卡斯数 2, 1, 3, 4, 7, 11, ..., 521, 843 来构造的。初始的 2 递减为 1,以说明 deflate 中的块结束符号。然后用这些频率发射 15 个符号。 (我选择了小写字母a..o,a 出现了 843 次。)结果是 2205 个字节的序列,加上块尾符号,是可能的最小的输入,可导致 15 位代码。比你的4096还小,所以确实可以生成你要找的测试向量。
然后我附加了另外 1891 个a,将其填充到 4096 字节。这不会改变生成的霍夫曼代码。然后,您采用该序列并使用 zlib 使用 Huffman-only 策略(zlib 中的Z_HUFFMAN_ONLY 或 pigz -zH)进行压缩,以避免 LZ77 压缩长的、重复的符号字符串。
如果您只想要原始的 deflate 流,则删除 zlib 流的前两个和后四个字节。
【讨论】: