【发布时间】:2019-09-05 23:36:53
【问题描述】:
我正在尝试编写一个程序来解压缩已经使用运行长度编码压缩的文件。由于某种原因,每个字符都会多次打印到文件中。例如,如果输入文件包含1l1i1n...,我的输出文件将显示llllllllll...
我尝试将 reps 变量从 for 循环打印到终端,以确保将其设置为正确的重复次数,甚至尝试使用 fprintf 但得到相同的结果。我不确定它是什么,但这里肯定有我不理解的东西?
顺便说一下,压缩文件也是从主函数以二进制模式打开的。
int uncompress_file(FILE *fd_compressed, const char *fname_out)
{
FILE *fd_out;
if (fd_compressed == NULL) {
fprintf(stderr, ...);
return -1;
}
if ((fd_out = fopen(fname_out, "wb")) == NULL) {
fprintf(stderr, ...);
return -1;
}
unsigned char cur, reps;
int i = 0;
while (fread(&cur, sizeof(unsigned char), 1, fd_compressed) > 0) {
if (i % 2 == 0) {
reps = cur;
}
else {
for (int j = 0; j < reps; j++)
fwrite(&cur, sizeof(unsigned char), 1, fd_out);
}
i++;
}
fclose(fd_out);
return 0;
}
【问题讨论】:
-
输入文件是否包含
"1l1i1n"?如,字符'1'(即字节0x31)?因为'1'和1不一样。