0

对于家庭作业,我创建了一个简单的压缩/解压缩程序,该程序利用了运行长度编码的幼稚实现。我已经让我的程序正常工作了;压缩和解压缩具有大量字符的任何文本文件(例如程序源)可以完美地工作。作为一个实验,我尝试压缩/解压缩压缩程序本身的二进制文件。这导致文件比原始二进制文件小得多,并且显然无法运行。是什么导致了这种数据丢失?

我的假设是它与二进制文件的表示方式有关,但我无法弄清楚。

4

2 回答 2

3

可能的问题:

  • 您的程序以文本模式打开二进制文件,这会损坏'\r''\n'字节
  • 您的程序错误地处理零字节,将它们视为字符串 ( '\0') 的结尾而不是它自己的数据
  • 您的程序使用char(实际上是signed char)数据字节,并且仅适用于非负值,即英文文本的 ASCII 字符,但无法使用可能为负的任意字符/字节值
  • 您的程序在某处溢出,仅显示在大文件上
  • 你的程序还有其他一些与数据相关的错误
于 2013-04-01T07:03:46.673 回答
1

如果平台是 linux(如问题已标记),则二进制模式和文本模式之间没有区别。所以不应该这样;但即便如此,文件也应该以二进制形式打开。

我怀疑您的问题是程序将 '\0' 字符视为终止符(或其他特殊字符)而不是有效数据。

于 2013-04-01T07:01:45.340 回答