C - 按位压缩和解压缩

时间:2015-10-07 07:18:14

标签: c bit bit-shift compression

我对某事感到疑惑。我有几个* .txt文件,包含四个字符(每个字符的多个)。文件中的字符是:' ',':'。 ' @'和' \ n'。

我想要做的是将这些标准ASCII字符与使用较少位的内容交换。 ' '应与00交换,':'应与01交换,' @'应与01和' \ n'交换应与02交换。

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

问题是,我的代码不起作用 - 我无法弄清楚原因。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

    fp = fopen(文件,“wb +”);

    始终检查fopen的返回以避免访问null文件描述符。

  2. 当您将文件从压缩文件读入container时,您无法使用strlen评估长度,因为它会在第一个'\ 0'字符(0x00)处停止。例如。压缩将' '(空格或0x20)更改为0x00。这意味着strlen会为您提供长度,直到该char。

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

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

答案 1 :(得分:0)

您正在从POSIX库重新定义readwrite函数。使用其他名称或制作这些static

实际上建议您在程序static中创建所有本地函数。这可以最大限度地降低冲突风险,并允许编译器执行更好的优化。

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