7z压缩 lzma流式压缩、解压缩的实现 C语言

本文介绍了在C语言中如何使用lzma算法进行流式压缩和解压缩,特别是在固件OTA升级场景的应用。文章详细讲解了lzma工具的使用,包括如何编译和运行,并探讨了lzma压缩文件的内部结构。同时,作者提供了源代码,展示如何在Ubuntu环境下实现文件的压缩和解压缩操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中遇到OTA固件升级,压缩由上位机实现,解压缩在boot启动时,读取固件内容后边解压边加载数据的方式启动。
前期预研了三种压缩方案,分别是lz4、zip、7z,代码仓库放在下面,三者各自的原理可自行百度了解。

一、lzma的使用

由于项目中要求对所升级的固件压缩比的最大化,因此选择了7z中的lzma算法,版本为1900
在这里插入图片描述
LzmaUtil.c文件中完整实现了针对一个流式文件的压缩以及解压缩。实验环境为Ubuntu20.04。

  1. 编译
    修改Lzma文件夹下的makefile.gcc,将编译器修改为gcc。在当前目录下输入make -f makefile.gcc 编译生成lzma可执行文件
PROG = lzma
CXX = gcc
LIB =
RM = rm -f
CFLAGS = -c -O2 -Wall -D_7ZIP_ST
  1. 压缩
    ./lzma e *要压缩的文件* *目标文件* 第二个参数(e)不区分大小写

    ./lzma e makefile.gcc makefile_compr
    
  2. 解压
    ./lzma d *要解压的文件* *目标文件* 同样,第二个参数不区分大小写

    ./lzma d makefile_compr makefile_decompr
    

解压后可以对比makefile_decompr与原始文件makefile.gcc内容是否一致

二、lzma的深入理解
  1. lzma压缩文件的特征
Offset Size Description
  0     1   Special LZMA properties (lc,lp, pb in encoded form)
  1     4   Dictionary size (little endian)
  5     8   Uncompressed size <
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值