【问题标题】:How to write LZW compressed text to a file in C?如何将 LZW 压缩文本写入 C 中的文件?
【发布时间】:2020-12-23 08:33:05
【问题描述】:

您好,我用 C 语言做了一个简单的 LZW 压缩器,但我找不到任何关于如何将压缩值写入文件的信息。

例如我压缩了一个txt文件,它是“banana bandana”,输出代码是:

98 97 110 257 97 32 256 110 100 259

我应该如何将它写入一个新文件?我需要用C再读一遍并解压。

【问题讨论】:

  • 创建/打开新文件,写入可用的值,关闭文件。
  • 什么是98 97 110 257 97 32 256 110 100 259?它是一个字符串吗?它是intshort 或其他的数组吗?问题不完整,请edit 告诉我们更多信息,并可能向我们展示您代码的一些相关部分。
  • 每个输出代码 also 都有许多与之相关的位。您将该数量的 写入输出文件,这些位包含代码。要将位写入文件,您需要在整数“缓冲区”中累积位。每当您有八个或更多时,您将前八个作为一个字节写入文件,然后将它们从缓冲区中拉出。

标签: c compression lzw


【解决方案1】:

我猜是这样,你应该将压缩数据写入另一个文件,比如“banana.lzx”。

以下是如何将压缩数据写入文件:

#include <stdlib.h>
int compressed_data[10] = {98, 97, 110, 257, 97, 32, 256, 110, 100, 259};
FILE * fp = fopen("banana.lzx", "w");
fwrite(compressed_data, sizeof(compressed_data[0]), sizeof(compressed_data), fp);
fclose(fp);

下面是从文件中读取压缩数据的方法:

#include <stdlib.h>
int compressed_data[10] = {0};
FILE * fp = fopen("banana.lzx", "r");
fread(compressed_data, sizeof(compressed_data[0]), sizeof(compressed_data), fp);
fclose(fp);
/* compressed_data is retrieved, and can now be decompressed */

备注: 我对LZW压缩一无所知,但是压缩后的数据不应该是一组字节吗?如果是这样,为什么你的值高于255(参见257256259)?

【讨论】:

  • 打开文件时应使用二进制模式,以免在 Windows 上中断。
  • 您对 LZW 知识的看法是对的,但我认为我可以立即提供帮助。尽管如此,无论字节对齐如何,您最终都会得到字节作为压缩结果,不是吗?
  • @user3386109 实际上 LZW 方面与问题无关。问题其实是:如何将二进制数据写入文件.
  • @user3386109 不,我没有。但问题只是关于将数据写入文件。毕竟压缩数据只是字节。或者问题可能不完整。
  • 这样会不会写 sizeof(int) 次太多?
猜你喜欢
  • 2022-08-18
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多