- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 LzmaLib带有缓冲区的 LzmaCompress()
和 LzmaDecompress()
,改编提供的示例 here .
我正在测试一个 ~3MB 的缓冲区,压缩函数似乎工作正常(产生一个 ~1.2MB 的压缩缓冲区),但是当我尝试解压缩时,它只提取了 ~300 字节并返回 SZ_ERROR_DATA
.
提取出来的几个字节是对的,就是不知道为什么到此为止
我的代码:
#include <stdio.h>
#include <stdlib.h>
#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(
unsigned char **outBuf, size_t *dstLen,
unsigned char *inBuf, size_t srcLen
) {
*dstLen = 5000000;
*outBuf = (unsigned char*)malloc(*dstLen);
srcLen = srcLen - LZMA_PROPS_SIZE;
int res = LzmaUncompress(
*outBuf, dstLen,
(unsigned char*)(inBuf + LZMA_PROPS_SIZE), &srcLen,
inBuf, LZMA_PROPS_SIZE);
assert(res == SZ_OK);
}
void do_compress() {
FILE* file = fopen("Module.dll", "r");
size_t size, decSize;
unsigned char *data, *dec = NULL;
fseek(file, 0L, SEEK_END);
size = ftell(file);
fseek(file, 0L, SEEK_SET);
data = (unsigned char*)malloc(size);
fread(data, 1, size, file);
fclose(file);
compress((unsigned char**)&dec, &decSize, data, size);
file = fopen("Module.lzma", "w");
fwrite(dec, 1, decSize, file);
fclose(file);
}
void do_uncompress() {
FILE* file = fopen("Module.lzma", "r");
size_t size, decSize;
unsigned char *data, *dec = NULL;
fseek(file, 0L, SEEK_END);
size = ftell(file);
fseek(file, 0L, SEEK_SET);
data = (unsigned char*)malloc(size);
fread(data, 1, size, file);
fclose(file);
uncompress((unsigned char**)&dec, &decSize, data, size);
file = fopen("Module_DEC.dll", "w");
fwrite(dec, 1, decSize, file);
fclose(file);
}
int main()
{
do_compress();
do_uncompress();
return 0;
}
如果这段代码不是使用 LzmaLib 压缩缓冲区的更好方法,我很乐意接受建议。
最佳答案
我敢打赌问题出在您读取/写入文件的方式上。您需要以二进制模式打开它们以防止在读/写操作期间进行任何替换。
更改所有实例:
fopen(xxx, "r")
-> fopen(xxx, "rb")
fopen(xxx, "w")
-> fopen(xxx, "wb")
关于c - LzmaLib : compress/decompress buffer in C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40732966/
我一直在尝试导入名为 Winter Forest Envoriment 的 Assets ,每次单击导入时都会出现错误“导入包失败,出现错误:无法解压缩包UnityEngine.GUIUtility:
我想编写一个函数,它接受一个压缩字符串并输出解压缩字符串。 像 a2b2c3 这样的压缩字符串解压字符串为 aabbccc更多的例子是 `a` -> `a` `ab12` -> `abbbbbbbbb
我正在尝试使用 Swift 压缩包解压缩 lz4 压缩的 png 图像,但代码以零大小退出。 我的代码如下,解压后的文件预计为240Kb。 [更新 2] 我在 Apple 的文档中偶然发现了这一点:
我正在尝试使用 kafka-python。它要求安装 Snappy。所以我安装它 pip 安装 snappy pip 安装 python_snappy-0.5.2-cp36-cp36m-win_amd
我正在尝试解压缩 MySQL 的 COMPRESS 函数返回的值: SQLQuery query = session .createSQLQuery("SELECT ID, C
我正在尝试使用 Go 创建压缩字符串池。这是我的代码 - http://play.golang.org/p/T5usLfU0fA 我无法解压用 compress/lzw 包压缩的 bin。 lzw.W
我读过这篇 SO post无济于事。 我正在尝试解压缩来自 URL 的 .gz 文件。 url_file_handle=StringIO( gz_data ) gzip_file_handle=gzi
本文整理了Java中loci.formats.codec.ZlibCodec.decompress()方法的一些代码示例,展示了ZlibCodec.decompress()的具体用法。这些代码示例主要
在 ubuntu 19.04 上安装 Cassandra 3.11 版本后,一旦我启动命令 cqlsh,我就会收到以下错误 root@dnilesh:/etc/cassandra# cqlsh Con
我想将一些字节数据插入到 mysql VARBINARY 列中。数据很大,所以我想以压缩的方式存储它。 我正在使用 Percona 5.6 Mysql。我想用Java模拟mysql的COMPRESS函
我可以在python中解压从mysql压缩的数据吗? MySQL 5.6 select to_base64(compress("test")); 来自mysql的结果 BAAAAHicK0ktLgEA
http://php.net/manual/en/phar.decompress.php decompress(); // creates /path/to/my.phar ?> $p2 第一次用在代
我使用 Pillow 库创建缩略图。我必须创建很多,实际上超过 10.000 程序运行良好,但在处理大约 1.500 后,出现以下错误: Traceback (most recent call
我正在尝试使用 LzmaLib带有缓冲区的 LzmaCompress() 和 LzmaDecompress(),改编提供的示例 here . 我正在测试一个 ~3MB 的缓冲区,压缩函数似乎工作正常(
我是一名刚毕业的 SWE,正在学习 Go(并且喜欢它)。 我正在为维基百科转储文件构建一个解析器——基本上是一个巨大的 bzip2 压缩 XML 文件(~50GB 未压缩)。 我想同时做流式解压和解析
我有一个从MySQL表中获取名称(字符串)和值(byte[])的查询。查询都在执行,因为如果我在最后一行放上断点,我就可以查看数据数据表,并看到填充了名称字段的记录。但是,值字段为空。。如果我从查询中
本文整理了Java中net.spy.memcached.transcoders.WhalinV1Transcoder.decompress()方法的一些代码示例,展示了WhalinV1Transcod
本文整理了Java中net.spy.memcached.transcoders.WhalinTranscoder.decompress()方法的一些代码示例,展示了WhalinTranscoder.d
本文整理了Java中com.github.luben.zstd.Zstd.decompress()方法的一些代码示例,展示了Zstd.decompress()的具体用法。这些代码示例主要来源于Gith
本文整理了Java中io.airlift.compress.zstd.ZstdDecompressor.decompress()方法的一些代码示例,展示了ZstdDecompressor.decomp
我是一名优秀的程序员,十分优秀!