表示C二进制文件

时间:2013-04-01 06:53:18

标签: c linux compression binaries

对于家庭作业,我创建了一个简单的压缩/解压缩程序,该程序利用了游程编码的简单实现。我的程序正在运行;使用相当多的字符(例如程序源)压缩和解压缩任何文本文件都可以完美地工作。作为一个实验,我试图压缩/解压缩压缩程序本身的二进制文件。这导致文件比原始二进制文件小得多,显然是不可运行的。造成这种数据丢失的原因是什么?

我的假设是它与二进制文件的表示方式有关,但我不能过去那么多。

2 个答案:

答案 0 :(得分:3)

可能的问题:

  • 您的程序以文本模式打开二进制文件,这会损坏'\r''\n'字节
  • 您的程序错误地处理零字节,将它们视为字符串的结尾('\0')而不是它自己的数据
  • 您的程序使用char(实际上是signed char)来获取数据字节,并且只能正常使用非负值,即英文文本的ASCII字符,但无法使用任意值字符/字节值,可能是负数
  • 你的程序在某个地方出现溢出,只出现在大文件上
  • 您的程序还有其他一些与数据相关的错误

答案 1 :(得分:1)

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

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