NRV 是一种压缩-解压缩器,由 Markus FXJ Oberhumer (www.oberhumer.com) 对尺寸和速度进行了高度优化。幸运的是,它有开源版本,可在他的网站http://www.oberhumer.com/opensource/ucl/#download下载。它有多种口味,我一直在使用的一种叫做 UCL1.03。
使用这个软件和你的 xml 描述文件,我能够解压缩你的二进制文件。我是通过以下方式做到的:
- 从提供的源构建一个可执行文件(在我的下载中,没有二进制文件)。有一个适用于各种平台的 bat 文件,适用于 Windows 的文件称为 vc.bat。但是,它对我不起作用,大概是因为我的环境变量没有以正确的方式设置 bat 运行。因此我做了一个VStudio解决方案(VS2013,VS2015给出了一些错误),它产生了一个能够读取和解压文件的exe。这个 VS 项目包含以下文件(全部来自下载):
- “src”目录中的所有 .c 文件
- 文件 uclpack.c,位于“examples”目录中,包含“main”。
- 必要的头文件,它们都在“include”或“examples”目录中。
在项目设置中确保正确设置了包含目录(与 VS 中一样)。
- 将正确的标头添加到您的二进制文件中。
标题由以下部分组成:
- “魔法”前缀:见图
- 标志:大部分不清楚,LSByte 控制 CRC-32 的生成(与 xml 文件中的不同)。
- 解压方式:2B、2D、2E可用,只有2B适用于您的文件。
- 级别:不清楚,但不得为零。
- 块大小:解压缩器的内存。必须至少具有未压缩块的大小。
- 未压缩大小:从您的 xml 文件中读取
- 压缩大小:从您的 xml 文件中读取。
标头中的所有数字都是 Big-Endian(即 MSB 优先)。请注意,软件需要在每个压缩块后都有一个标头,因此最好将您的文件拆分为三个单独的文件。只有第一个是有意义的,其他两个只包含一个常数。通过逐步执行程序,可以很容易地找到标题的内容。在无错误的情况下,解压器返回 0。
为了您的比较,这里有一个字符串存在于解压文件中,文件偏移量为 0x6a56:
Incomming message not handled