对于家庭作业,我创建了一个简单的压缩/解压缩程序,该程序利用了游程编码的简单实现。我的程序正在运行;使用相当多的字符(例如程序源)压缩和解压缩任何文本文件都可以完美地工作。作为一个实验,我试图压缩/解压缩压缩程序本身的二进制文件。这导致文件比原始二进制文件小得多,显然是不可运行的。造成这种数据丢失的原因是什么?
我的假设是它与二进制文件的表示方式有关,但我不能过去那么多。
答案 0 :(得分:3)
可能的问题:
'\r'
和'\n'
字节'\0'
)而不是它自己的数据char
(实际上是signed char
)来获取数据字节,并且只能正常使用非负值,即英文文本的ASCII字符,但无法使用任意值字符/字节值,可能是负数答案 1 :(得分:1)
如果平台是linux(问题被标记),二进制和文本模式之间没有区别。所以不应该那样;但即便如此,文件应该以二进制形式打开。
我怀疑你的问题是程序将'\ 0'字符视为终结符(或其他特殊情况),而不是有效数据。