我想知道一件事。我有几个包含四个字符的 *.txt 文件(每个字符多个)。文件中的字符为:' '、':'。 “@”和“\n”。
我想要做的是将这些标准 ASCII 字符替换为使用较少位的字符。 ' ' 应替换为 00,':' 应替换为 01,'@' 应替换为 01,'\n' 应替换为 02。
这个想法是压缩,然后可以再次解压缩文件。
问题是,我的代码不起作用 - 我不明白为什么。
如有任何帮助,我们将不胜感激。
最佳答案
您的
compress
函数尝试打开文件以使用rb+
进行写入。它 如果文件不存在,则触发段错误。顺便说一句,你必须 使用wb+
来编写它。fp = fopen(文件, "wb+");
始终检查 fopen 的返回以避免访问
null
文件描述符。当您将文件从压缩文件读取到
container
中时,您无法使用strlen
计算长度,因为它在第一个 '\0 处停止' 字符(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;
关于C——按位压缩和解压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32986026/