Tag: 压缩

简单的ASCII压缩 – 帮助最小化系统调用

在我的上一个问题中 ,nos提供了一种从ASCII字符字节中删除最重要位的方法,这与我教授在描述项目时所说的完全一致。 我的问题是如何剥离有效位并使用write命令将其打包到缓冲区中。 由于write命令占用了要写入的字节数的长度,因此如何更深入地处理缓冲区数组的位级别?

ASCII压缩器适用于短测试文件,而不是长时间

系统编程中的当前项目是提出一个ASCII压缩器,它删除顶部的零位并将内容写入文件。 为了便于解压缩,将原始文件大小写入文件,然后压缩char字节。 有两个文件可以运行测试 – 一个是63字节长,另一个是5344213字节。 我的代码在第一个测试文件中按预期工作,因为它写入56个字节的压缩文本和4个字节的文件头。 但是,当我在长测试文件上尝试它时,压缩版本比原始版本短3个字节,当它应该大约小749KiB,或原始大小的14%。 我已经计算出长测试文件的前两个写循环的二进制位移值,它们匹配我的测试打印输出中记录的内容。 while ( (characters= read(openReadFile, unpacked, BUFFER)) >0 ){ unsigned char packed[7]; //compression storage int i, j, k, writeCount, endLength, endLoop; //loop through the buffer array for (i=0; i< characters-1; i++){ j= i%7; //fill up the compressed array packed[j]= packer(unpacked[i], unpacked[i+1], j); if (j == 6){ writeCalls++; //track […]

如何有效编码/解码压缩位置描述?

我正在为日本象棋变体写一个桌面。 为了索引表基,我将每个国际象棋位置编码为整数。 在其中一个编码步骤中,我编码棋盘上的棋子。 由于实际方法有点复杂,让我以简化的方式解释问题。 编码 在最后的桌面游戏中,我有(比方说)六个不同的棋子,我想在9个方格的棋盘上分发。 我可以通过六元组( a , b , c , d , e , f )天真地表示他们的位置,其中每个变量a到f是0到8范围内的数字,表示相应的棋子所在的位置。 然而,这种表示并不是最佳的:没有两个国际象棋棋子可以占据同一个方格,但前面提到的编码很乐意允许这样做。 我们可以通过六元组[ a,b’,c’,d’,e’,f’ ]对相同位置进行编码,其中a与之前的a相同, b’是0到7之间的数字,表示第二件正方形的数量。 这通过为第一块未打开的每个方格分配从0到7的数字来工作。 例如,如果第一块位于正方形3上,则第二块的正方形数字为: 1st piece: 0 1 2 3 4 5 6 7 8 2nd piece: 0 1 2 – 3 4 5 6 7 其他部分类似地编码, c’作为0到6之间的数字, d’作为0到5之间的数字等。例如,幼稚编码(5,2,3,0,7,4)产生紧凑编码(5,2,2,0,3,1): 1st: 0 1 2 […]

C / C ++打包和压缩

我正在开发一个商业项目,需要将几个文件捆绑(打包)到一个存档中然后进行压缩。 现在我们在我们的实用程序库中有zlib,但它看起来不像zlib具有将多个文件压缩到一个存档中的function。 有没有人知道我可以使用的免费图书馆?

解压缩在中间停止,输出文件用零填充(BLACK PIXELS)?

我试图在bmp(位图)文件上应用DCT(离散余弦变换)压缩。 我有一个我在Turbo C ++中运行的ac文件。 这实际上并没有压缩,但我试图实现DCT和IDCT。 代码如下: /* the image to be compressed is a bmp with 24 bpp and with name “college4.bmp” of dimensions 200*160 ie 25*20- 8*8 blocks o/p is college2.dat format: 8 bit signed integers starting rowwise from 0,0 to 8,8 the coefficients order is blue,green,red for the block no 1 then 2 […]

解码JPEG霍夫曼块(表)

以下块由Huffman块标记嵌套 -HUFF———————————————————————0084- 10 0 1 2 4 3 4 6 5 6 8 a 9 4 2 3 0 1 2 11 0 3 4 21 5 12 31 6 41 51 61 13 22 71 81 91 a1 14 32 b1 d1 f0 15 23 35 42 b2 c1 7 16 24 33 52 […]

C库用于压缩顺序正整数

我有一个非常普遍的问题,就是为磁盘内的字符串数组创建一个索引。 简而言之,我需要将每个字符串的位置存储在磁盘表示中。 例如,一个非常天真的解决方案是索引数组,如下所示: uint64 idx [] = {0,20,500,1024,…,103434}; 其中第一个字符串位于第0位,第二个字符串位于第20位,第三个位于第500位,第n个位于第103434位。 这些位置总是按顺序排列为非负64位整数。 虽然数字可能会有任何差异,但实际上我认为典型的差异在2 ^ 8到2 ^ 20的范围内。 我希望这个索引在内存中是mmap,并且将随机访问这些位置(假设均匀分布)。 我正在考虑编写自己的代码来进行某种块增量编码或其他更复杂的编码,但是在编码/解码速度和空间之间有很多不同的权衡,我宁愿把工作库作为一个起点。甚至可能在没有任何自定义的情况下解决问题。 任何提示? 一个c库是理想的,但是c ++也可以让我运行一些初步的基准测试。 如果您还在关注,还有一些细节。 这将用于在库cmph( http://cmph.sf.net )上构建类似于cdb( http://cr.yp.to/cdb/cdbmake.html )的库。 简而言之,它适用于基于大型磁盘的只读关联映射,内存中的索引很小。 由于它是一个库,我无法控制输入,但我想要优化的典型用例有数百万个值,平均值大小在几千字节范围内,最大值在2 ^ 31。 为了记录,如果我没有找到准备使用的库,我打算在64个整数的块中实现delta编码,其中初始字节指定到目前为止的块偏移量。 块本身将用树索引,给我O(log(n / 64))访问时间。 有太多其他选择,我宁愿不讨论它们。 我真的很期待使用代码而不是如何实现编码的想法。 我将很高兴与大家分享我工作后所做的一切。 感谢您的帮助,如果您有任何疑问,请告诉我。

在C中压缩ASCII字符串

我有一些C代码在内存中存储ASCII字符串作为四字节长度后跟字符串。 字符串长度在10-250字节范围内。 为了减少占用,我想在运行中单独压缩每个字符串,仍然存储(压缩字符串的)长度,然后是压缩字符串。 我不想在比单个字符串更大的范围内进行压缩,因为任何字符串都可以随时读/写。 有哪些库/算法可用于此操作? 谢谢你的帮助。 NickB

在C中放气和膨胀(zlib.h)

我正在尝试实现zlib.h deflate和inflate函数来压缩和解压缩char数组(不是文件)。 我想知道以下语法是否正确? 我错过了什么或定义错误的东西? char a[50] = “Hello World!”; char b[50]; char c[50]; // deflate // zlib struct z_stream defstream; defstream.zalloc = Z_NULL; defstream.zfree = Z_NULL; defstream.opaque = Z_NULL; defstream.avail_in = (uInt)sizeof(a); // size of input defstream.next_in = (Bytef *)a; // input char array defstream.avail_out = (uInt)sizeof(b); // size of output defstream.next_out = (Bytef *)b; […]

数据压缩算法

我想知道是否有人有一个数据压缩算法列表。 我基本上都不知道数据压缩,我希望能够了解更多关于不同算法的知识,看看哪些是最新的,还有很多ASIC尚未开发。 我希望实现一个数据压缩ASIC,它独立于进入的数据类型(音频,video,图像等)。 如果我的问题太开放,请告诉我,我会修改。 谢谢