gpt4 book ai didi

objective-c - 以编程方式 LZMA 解压缩静态 LZMA 压缩文件

转载 作者:行者123 更新时间:2023-11-29 04:48:40 27 4
gpt4 key购买 nike

我正在 LZMA 解压缩我之前使用 lzma e <infile> <outfile> -lc0 -lp2 压缩的资源文件从终端导入到我的项目中。但是,当应用于此文件时LzmaDec_DecodeToBuf返回 1在第一次迭代中,即 LZMA 数据错误。 (同时 inLen 始终为 5outLen0 。)

这是为什么?

我的代码如下:

SRes static decompress(FILE *inFile, FILE *outFile)
{
// Position the inFile pointer at the start.
fseek(inFile, 0, SEEK_SET);

// Read in LZMA properties (5 bytes) and uncompressed size (8 bytes, little-endian) to header.
char unsigned header[LZMA_PROPS_SIZE+8];
fgets(header, sizeof(header), inFile);
CLzmaDec state;
LzmaDec_Construct(&state);
SRes res = LzmaDec_Allocate(&state, header, LZMA_PROPS_SIZE, &SzAllocForLzma);

if (res != SZ_OK) {
// Free all allocated structures.
LzmaDec_Free(&state, &SzAllocForLzma);
return res;
}

char unsigned inBuf[IN_BUF_SIZE];
char unsigned outBuf[OUT_BUF_SIZE];
LzmaDec_Init(&state);

ELzmaStatus status;
long unsigned outLen = sizeof(outBuf);
long unsigned inLen = sizeof(inBuf);
long unsigned inPos = ftell(inFile);

while (fgets(inBuf, sizeof(inBuf), inFile) != NULL) {
inLen = MIN(sizeof(inBuf), MAX(ftell(inFile)-inPos, 0));
outLen = sizeof(outBuf);

SRes res = LzmaDec_DecodeToBuf(&state,
outBuf,
&outLen,
inBuf,
&inLen,
LZMA_FINISH_ANY,
&status);
// continues...

最佳答案

这是一个相当旧的帖子要回复,但是我遇到了同样的问题。

问题是 header 不应该是您正在解压缩的数据的一部分。解决方案是在读取数据时从 sizeof(header) 而不是 0 开始,并且不要忘记通过 sizeof(标题)也

关于objective-c - 以编程方式 LZMA 解压缩静态 LZMA 压缩文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9219693/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com