#8-bit #z80 #zx-spectrum #zx0

zx0decompress

解压缩在8位平台上常用的ZX0压缩格式的文件

3个版本

0.1.2 2023年5月27日
0.1.1 2023年5月27日
0.1.0 2023年5月26日

#363 in 压缩

每月50次下载
用于 zx0dec

BSD-3-Clause

105KB
215 代码行

zx0decompress

一个Rust库,用于解压缩使用Einar Saukas的ZX0压缩格式压缩的文件。

通常,您使用ZX0格式在ZX Spectrum等8位平台上节省空间。您在现代计算机上压缩数据,并在目标平台上使用汇编语言实现的解压缩器。

对于某些用例,例如构建工具和其他实用程序,在您的工作站上拥有解压缩器可能仍然很有用。这就是我创建这个库的原因。

我还基于这个库实现了一个名为zx0dec的命令行应用程序。

用法

将crate添加到您的项目

cargo add zx0decompress

使用任何实现 std::io::Read的对象调用 zx0decompress::decompress

您可能还需要指定除默认设置以外的设置。为此,请调用 zx0decompress::decompress_with_settings

示例

从文件解压缩到 Vec<u8>

let mut source = std::fs::File::open(filename)?;
let content = zx0decompress::decompress(&mut source)?;

从字节数组解压缩到 Vec<u8>

let source = [
    0x1fu8, 0x41, 0x42, 0x52, 0x41, 0x20, 0xf6, 0xab, 0x43, 0x44, 0xf5, 0xf2, 0x55, 0x58,
];
let result = decompress(&mut source.as_ref()).unwrap();
assert_eq!(&result, b"ABRA ABRACADABRA");

测试

lib/tests 中有压缩文件(使用 zx0-rs 压缩)及其对应的未压缩文件。测试用例验证 zx0decompress 是否正确解压缩。

fuzz 目录中有可以使用 cargo-fuzz 运行的模糊测试。

cargo fuzz run fuzz_decompress

依赖关系

~310–780KB
~18K SLoC