c语言lzma算法,LzmaLib:C中的压缩/解压缩缓冲区

本文档描述了在C语言中使用LzmaLib库进行文件压缩和解压缩遇到的问题。作者在压缩3MB大小的缓冲区时,能够得到1.2MB的压缩结果,但在解压缩过程中,仅能提取到300字节的数据,且返回错误码SZ_ERROR_DATA。代码中展示了如何使用LzmaCompress和LzmaDecompress函数,并提供了压缩和解压缩的实现。作者寻求关于改进LzmaLib缓冲区处理方法的建议。

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

我正在尝试使用

LzmaLib的LzmaCompress()和LzmaDecompress()和缓冲区,调整

here提供的示例.

我正在使用~3MB缓冲区进行测试,并且压缩函数似乎工作正常(产生~1.2MB的压缩缓冲区),但是当我尝试解压缩时,它只提取~300字节并返回SZ_ERROR_DATA.

提取的少数字节是正确的,但我不知道为什么它会停在那里.

我的代码:

#include

#include

#include "LzmaLib.h"

void compress(

unsigned char **outBuf, size_t *dstLen,

unsigned char *inBuf, size_t srcLen)

{

unsigned propsSize = LZMA_PROPS_SIZE;

*dstLen = srcLen + srcLen / 3 + 128;

*outBuf = (unsigned char*)malloc(propsSize + *dstLen);

int res = LzmaCompress(

(unsigned char*)(*outBuf + LZMA_PROPS_SIZE), dstLen,

inBuf, srcLen,

*outBuf, &propsSize,

-1, 0, -1, -1, -1, -1, -1);

assert(res == SZ_OK);

*dstLen = *dstLen + LZMA_PROPS_SIZE;

}

void uncompress(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值