对于家庭作业,我创建了一个简单的压缩/解压缩程序,该程序利用了运行长度编码的幼稚实现。我已经让我的程序正常工作了;压缩和解压缩具有大量字符的任何文本文件(例如程序源)可以完美地工作。作为一个实验,我尝试压缩/解压缩压缩程序本身的二进制文件。这导致文件比原始二进制文件小得多,并且显然无法运行。是什么导致了这种数据丢失?
我的假设是它与二进制文件的表示方式有关,但我无法弄清楚。
对于家庭作业,我创建了一个简单的压缩/解压缩程序,该程序利用了运行长度编码的幼稚实现。我已经让我的程序正常工作了;压缩和解压缩具有大量字符的任何文本文件(例如程序源)可以完美地工作。作为一个实验,我尝试压缩/解压缩压缩程序本身的二进制文件。这导致文件比原始二进制文件小得多,并且显然无法运行。是什么导致了这种数据丢失?
我的假设是它与二进制文件的表示方式有关,但我无法弄清楚。
可能的问题:
'\r'
和'\n'
字节'\0'
) 的结尾而不是它自己的数据char
(实际上是signed char
)数据字节,并且仅适用于非负值,即英文文本的 ASCII 字符,但无法使用可能为负的任意字符/字节值如果平台是 linux(如问题已标记),则二进制模式和文本模式之间没有区别。所以不应该这样;但即便如此,文件也应该以二进制形式打开。
我怀疑您的问题是程序将 '\0' 字符视为终止符(或其他特殊字符)而不是有效数据。