我有点疑惑。我有两个*.txt文件,其中包含四个字符(每个字符的倍数)。文件中的字符为:' ',':'。'@'和'n'.
我想做的是将这些标准的ascii字符与使用更少位的东西交换。' '应与00交换,':'应与01交换,'@'应与01交换,'n'应与02交换。
这个想法是压缩文件,以后有可能再次解压缩文件。
问题是,我的代码不工作——我不知道为什么。
-
你的
compress
函数试图用rb+
打开文件写。它如果文件不存在,则触发分段错误。顺便说一句,你必须用wb+
写fp = fopen(file, "wb+");
总是检查fopen的返回,以避免访问
null
文件描述符 -
当您从压缩文件中读取文件到
container
时,您无法使用strlen
计算长度,因为它在第一个' '字符(0x00)处停止。例如,您的压缩更改' '
(空间或0x20)为0x00。这意味着strlen给出了到该字符的长度。 -
变量
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库中的read
和write
函数。使用不同的名称或使这些static
.
实际上建议将程序中的所有本地函数设置为static
。这将最小化冲突的风险,并允许编译器执行更好的优化。
您的代码中还有其他问题,但是这个问题阻塞了所有调试尝试。