- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
LZW 压缩算法在压缩后增加了位大小:
这是压缩函数的代码:
// compression
void compress(FILE *inputFile, FILE *outputFile) {
int prefix;
int character;
int nextCode;
int index;
// LZW starts out with a dictionary of 256 characters (in the case of 8 codeLength) and uses those as the "standard"
// character set.
nextCode = 256; // next code is the next available string code
dictionaryInit();
// while (there is still data to be read)
while ((character = getc(inputFile)) != (unsigned)EOF) { // ch = read a character;
// if (dictionary contains prefix+character)
if ((index = dictionaryLookup(prefix, character)) != -1) prefix = index; // prefix = prefix+character
else { // ...no, try to add it
// encode s to output file
writeBinary(outputFile, prefix);
// add prefix+character to dictionary
if (nextCode < dictionarySize) dictionaryAdd(prefix, character, nextCode++);
// prefix = character
prefix = character; //... output the last string after adding the new one
}
}
// encode s to output file
writeBinary(outputFile, prefix); // output the last code
if (leftover > 0) fputc(leftoverBits << 4, outputFile);
// free the dictionary here
dictionaryDestroy();
}
其中writeBinary(它在程序中充当缓冲区)函数如下:
void writeBinary(FILE * output, int code);
int leftover = 0;
int leftoverBits;
void writeBinary(FILE * output, int code) {
if (leftover > 0) {
int previousCode = (leftoverBits << 4) + (code >> 8);
fputc(previousCode, output);
fputc(code, output);
leftover = 0; // no leftover now
} else {
leftoverBits = code & 0xF; // save leftover, the last 00001111
leftover = 1;
fputc(code >> 4, output);
}
}
请问您能发现错误吗?我将不胜感激!
最佳答案
chux 已经向您指出了解决方案:您需要从 9 位代码开始,并在当前位大小的可用代码耗尽时将代码大小增加到 12。如果您从一开始就编写 12 位代码,那么当然没有压缩效果。
关于c - LZW 压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44037600/
LZW 压缩算法在压缩后增加了位大小: 这是压缩函数的代码: // compression void compress(FILE *inputFile, FILE *outputFile) {
我正在寻找可以压缩和解压缩word文档的c#中的LZW压缩算法。我在谷歌上搜索过它,但它没有给我我需要的答案。任何人都可以帮助我获得它的代码并让我了解如何在我的项目中真正实现 LZW。 最佳答案 有一
我试图让这段代码正常工作,但当我尝试编码时,它似乎无法正常工作。我有一个 60 字节的文本文件。我对其进行编码,输出文件为 100 字节。当我解码该文件时,它变成了 65 字节。它解码正确,但文件大小
我很难理解 LZW 算法。我正在检查维基百科 (http://en.wikipedia.org/w/index.php?title=Lempel-Ziv-Welch&oldid=245292660)
好吧,我必须使用 LZW 算法制作一个 PPM 图像压缩器,我理解该算法和代码并实现了一个字符串版本(在 Java 中,用于测试)。 最大的问题是压缩,因为如果我有: 输入:ABCDABCDABCDA
我目前正在将 LZW 压缩和解压缩方法从 FFmpeg 源代码实现到我的项目。我偶然发现的是输出缓冲区的大小(将存储压缩数据的地方)需要大于我们要压缩的输入缓冲区的大小。这与压缩本身不矛盾吗? 下一部
我找到了 LZW 算法的实现,我想知道如何将其输出(一个 int 列表)表示为字节数组。 我曾尝试使用一个字节,但在长输入的情况下,字典有超过 256 个条目,因此我无法转换。 然后我尝试添加一个额外
我正在编写一个 C 库来将 SDL_Surfaces 导出为各种格式作为练习,到目前为止,我已经搞定了 BMP、TGA 和 PCX 格式。现在我正在制作 GIF格式,我觉得我已经非常接近让它发挥作用了
我正在尝试实现LZW压缩和解压缩技术。我的程序将任何文件作为输入流并将其读入字节数组。然后,它对其应用压缩算法,并在字符串变量中返回编码字节。 然后我应用解压缩算法返回原始数字。 现在为了检索原始文件
我有一个 LZW 算法 - private void start(int maxNumBits) throws IOException{ System.out.println("Beginni
谁能告诉我如何用 c 语言构建 LZW 压缩树?是不是像 结构树{ 短下一个[255]; } 最佳答案 LZW 的树更像是一本字典。每个条目由一个代码(索引)和一个字符组成。树在逻辑上用所有字符初始化
我希望更改 LZW 压缩器,使其能够在 LZW 编码文件中搜索单词并查找该搜索词的匹配数。例如,如果我的文件用作 Prompt:>lzw "searchterm" encoded_file.lzw 3
我做了一些研究,但没有什么真正与我的问题有关...... 我实际上正在尝试为学校编写 LZW 压缩代码,并且我需要一个函数来检查某个元素是否在我的字典中。 但是,当我调用这个函数时,它尝试访问我的字典
这里是函数本身。我在那里遇到了段错误,因为显然我无法将字符串分配给数组中的该值。 clang/gcc 都给我一个警告。 Clang 的好一点,它是“期望 char 分配 char *”。我不知道还有什
我有以下形式的字符串(大约 1-5Kb): FF,A3V,X7Y,aA4,.... lzw 非常好地压缩这些,但包含土耳其字符。然后将它们提交到 MySQL 数据库。 有时 MySQL 可能会“播放”
我正在编写一个通用的 LZW 解码器 c++ 程序,但我无法找到有关所用代码字长度(以位为单位)的文档。我发现一些文章说代码字长 12 位,而其他人说 16 位,还有一些文章说使用可变位长度。那是哪一
所以我正在尝试用 C++ 制作一个简单的文件压缩器/解压缩器(我的目标不是尽可能获得最好的结果)但我真的被卡住了,因为我充满了疑问所以他们在这里: 我应该使用哪种字典(我正在使用 map )?我应该存
CGPDFScanner 会解压缩它遇到的任何 LZW 压缩吗?还是我要为此负责? [我假设它确实如此,因为我正在使用大量的 Tj 运算符等] 最佳答案 是的,CGPDFScanner 将解压缩它找到
当我使用长度为 256 的符号表(字典)时,我的 LZW 压缩工作正常,编码器和解码器都使用 256 并且一切正常但是当我将这个数字增加到例如 512、1024、4096 时,解码文件输出是与第一个输
注意:这不是 LZW 压缩的正确用法。我只是在玩弄它。 问题 在一次传递中,是否可以同时更新字典中元素的频率计数? 我的实现 import sys from collections import de
我是一名优秀的程序员,十分优秀!