Tag: 压缩

压缩算法

我正在研究压缩算法,其中我们必须用C编写代码。程序获取一个文件并删除每个字符中最重要的位并将压缩文本存储在另一个文件中。 我写了一个名为compress的函数,如下所示。 我在释放out_buf的同时遇到了段错误。 任何帮助都将是一个巨大的乐趣。

C.循环压缩+发送(gzip)ZLIB

我目前正在用C构建一个HTTP服务器。 请注意这段代码: #define CHUNK 0x4000 z_stream strm; unsigned char out[CHUNK]; int ret; char buff[200]; strm.zalloc = Z_NULL; strm.zfree = Z_NULL; strm.opaque = Z_NULL; int windowsBits = 15; int GZIP_ENCODING = 16; ret = deflateInit2(&strm, Z_BEST_SPEED, Z_DEFLATED, windowsBits | GZIP_ENCODING, 1, Z_DEFAULT_STRATEGY); fill(buff); //fill buff with infos do { strm.next_in = (z_const unsigned char *)buff; strm.avail_in […]

压缩数字:读错误

我正在使用此函数来压缩Numbers: unsigned char *MyCompress(unsigned int num, unsigned char *buffer){ int i = 0; unsigned int r = num; unsigned char temp; unsigned char s[5]; printf(“received %d to compress\n”, num); if(!r){ *buffer++ = 0; return buffer; } while (r){ s[i] = r & 127; r >>= 7; printf(“s[%d]=%d; r=%d\n”, i, s[i], r); i++; } while (–i […]

如何在c中阅读.exe

我正在制作一个小型压缩程序的小项目。 为此,我想读取一个文件,比如一个.exe,然后用char解析它char并使用一些简单的字典算法来加密它。 为了阅读文件我只是使用一个简单的代码我发现: char *readFile(char *fileName) { FILE *file; char *code = malloc(10000* sizeof(char)); file = fopen(fileName, “rb”); do { *code++ = (char)fgetc(file); } while(*code != EOF); return code; } 我的问题是,读取.exe或任何文件似乎是不可能的。 在制作“代码”的printf()时,没有任何内容被写入。 我能做什么?

掩盖最重要的一点

我写了这个函数来删除每个字节中最重要的位。 但是这个function似乎并没有像我希望的那样工作。 输出文件大小始终为“0”,我不明白为什么没有写入输出文件。 是否有更好,更简单的方法来删除每个字节中最重要的位?

zlib:如何维度avail_out

我想使用zlib来缩小一小块内存(<= 16 KiB)。 输出也存储在内存块中。 这里没有磁盘或数据库访问。 根据文档,我应该反复调用deflate() ,直到整个输入被放气。 在这两者之间,我必须增加输出所在的内存块的大小。 然而,这似乎不必要地复杂,甚至可能效率低下。 据我所知输入的大小,我不能预先确定输出所需的最大大小,然后只需调用一次deflate()吗? 如果是这样,最大输出尺寸是多少? 我假设类似:输入大小+一些字节开销

将无符号16位整数存储到文件的最有效方法

我正在使用字典最大大小为64000的字典压缩器。因此,我将我的条目存储为16位整数。 我正在做什么:要编码’a’,我得到它的ASCII值,97,然后将此数字转换为16位整数97的字符串表示。所以我最终编码’0000000001100001’为’a ‘,这显然不会在短期内节省太多空间。 我知道这个算法的更有效版本将从较小的整数大小开始(在我们需要更多的情况下存储的位数较少),但我想知道是否有更好的方法来 将我的整数’97’转换为固定长度的ASCII字符串,可以存储16位数据(97将是x位,46347也将是x位) 写入只能存储1和0的文件。 因为实际上,似乎我在文本文件中写了16个ascii字符,每个字符都是8位……所以这并不能真正帮助这个原因,是吗? 如果我能以任何方式更清楚,请告诉我。 我对这个网站很新。 谢谢! 编辑:就我所知,我如何存储我的字典完全取决于我。 我只知道我需要能够轻松地读回编码文件并从中获取整数。 另外,我只能包含我为该程序编写的stdio.h,stdlib.h,string.h和头文件。

C中的无损数据压缩,没有动态内存分配

我正在尝试为我正在研究的项目实现无损数据压缩算法。 目标是压缩固定大小的浮点值列表。 代码必须用C编写,不能使用动态内存分配。 这对我很有害,因为大多数(如果不是全部的话)无损算法需要一些动态分配。 我一直在研究的两个主要算法是霍夫曼和算术。 没有动态内存分配,这项任务是否可行? 你们有什么方法或想法吗? 如果您认为不可能,请告诉我原因:-) 任何帮助/建议都会有所帮助!

独立跨平台(Windows / Linux))C / C ++的文件压缩?

我正在寻找一个用C或C ++开发的(可以小的)开源库,我可以将它包含在我的MIT许可项目中(托管在谷歌代码上)。 我是一个爱好C / C ++程序员,所以我不是那么先进,但我知道我需要为名为“SA-MP”的应用程序开发插件(适用于Windows和Linux)。 我愿意做的是一个自动安装程序,它需要能够解压缩压缩文件(最好是.zip,但任何其他文件压缩方法都可以!)。 我已经找了这样一个库,但是他们总是需要在windows上有一些额外的dll或linux上的其他一些文件 – 这不是我要找的东西,因为最终用户可能无法知道如何安装插件用它所需的组件。 另外看一下Basic Compression Library,它似乎没有文件压缩,只是算法。 所以有了那个,我运气不好。 要使上述文字简短: 如果可以链接到我的C / C ++项目,则不允许外部依赖项,需要额外的库。 可以压缩整个目录并解压缩它们。 适用于Windows和Linux。 可以安全地与MIT许可证一起使用(可选,优先)

对于任何真实数据集,数据压缩比的最小可能值是什么

我正在为嵌入式硬件压缩器编写ZLIB就像使用deflate算法压缩给定输入流一样。 在进一步说明之前,我想解释数据压缩率。 数据压缩比定义为未压缩大小和压缩大小之间的比率。 压缩比通常大于1。 这意味着压缩数据通常小于未压缩数据,这是压缩的全部要点。 但情况并非总是如此。 例如,使用ZLIB库和某些Linux机器上生成的伪随机数据,压缩比大致为0.996。 这意味着压缩成10000字节的9960字节。 我知道ZLIB通过使用类型0块来处理这种情况,它只返回带有大约5字节头的原始未压缩数据,因此它只能提供5字节的开销直到64KB的数据块。 这是这个问题的智能解决方案但由于某些原因我不能在我的API中使用它。 我必须提前提供额外的安全空间来处理这种情况。 现在,如果我知道尽可能少的已知数据压缩率,我将很容易计算出我必须提供的额外空间。 否则为了安全起见,我必须提供超过所需的额外空间,这在嵌入式系统中至关重要。 在计算数据压缩率时,我不关心页眉,页脚,极小的数据集和系统特定的细节,因为我单独处理它。 我特别感兴趣的是,是否存在最小尺寸为1K的真实数据集,并且使用deflate算法可以提供小于0.99压缩比。 在这种情况下,计算将是: 压缩比=未压缩的大小/(使用deflate压缩的大小,不包括页眉,页脚和系统特定的开销) 请提供反馈。 任何帮助,将不胜感激。 如果可以提供对这样的数据集的引用,那将是很好的。 编辑: @MSalters评论指出硬件压缩器没有正确地遵循deflate规范,这可能是微代码中的一个错误。