我对某事感到疑惑。我有几个* .txt文件,包含四个字符(每个字符的多个)。文件中的字符是:' ',':'。 ' @'和' \ n'。
我想要做的是将这些标准ASCII字符与使用较少位的内容交换。 ' '应与00交换,':'应与01交换,' @'应与01和' \ n'交换应与02交换。
想法是压缩,然后再次有可能解压缩文件。
问题是,我的代码不起作用 - 我无法弄清楚原因。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您的compress
函数尝试打开要使用rb+
写入的文件。它
如果文件不存在,则触发分段错误。顺便说一句,你必须
使用wb+
来编写它。
fp = fopen(文件,“wb +”);
始终检查fopen的返回以避免访问null
文件描述符。
当您将文件从压缩文件读入container
时,您无法使用strlen
评估长度,因为它会在第一个'\ 0'字符(0x00)处停止。例如。压缩将' '
(空格或0x20)更改为0x00。这意味着strlen会为您提供长度,直到该char。
变量newCounter
,for 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;
答案 1 :(得分:0)
您正在从POSIX库重新定义read
和write
函数。使用其他名称或制作这些static
。
实际上建议您在程序static
中创建所有本地函数。这可以最大限度地降低冲突风险,并允许编译器执行更好的优化。
您的代码中还有其他问题,但这个问题阻止了所有调试尝试。