C位压缩和解压缩



我有点疑惑。我有两个*.txt文件,其中包含四个字符(每个字符的倍数)。文件中的字符为:' ',':'。'@'和'n'.

我想做的是将这些标准的ascii字符与使用更少位的东西交换。' '应与00交换,':'应与01交换,'@'应与01交换,'n'应与02交换。

这个想法是压缩文件,以后有可能再次解压缩文件。

问题是,我的代码不工作——我不知道为什么。

  1. 你的compress函数试图用rb+打开文件写。它如果文件不存在,则触发分段错误。顺便说一句,你必须用wb+

    fp = fopen(file, "wb+");

    总是检查fopen的返回,以避免访问null文件描述符

  2. 当您从压缩文件中读取文件到container时,您无法使用strlen计算长度,因为它在第一个''字符(0x00)处停止。例如,您的压缩更改' '(空间或0x20)为0x00。这意味着strlen给出了到该字符的长度。

  3. 变量newCounter,在for循环中第一次是0,它不是由if-elseif管理的。你的代码应该是:


   if(newCounter == 0)      swapped |= counter << 6;
   else if(newCounter == 1) swapped |= counter << 4;
   else if(newCounter == 2) swapped |= counter << 2;
   else                     swapped |= counter;

您正在重新定义POSIX库中的readwrite函数。使用不同的名称或使这些static .

实际上建议将程序中的所有本地函数设置为static。这将最小化冲突的风险,并允许编译器执行更好的优化。

您的代码中还有其他问题,但是这个问题阻塞了所有调试尝试。

最新更新