【发布时间】:2014-04-22 10:04:12
【问题描述】:
我正在用 C 语言编写一个压缩程序。它使用运行长度和 Rice golomb 编码,应用于位级别。我已经编写了程序,当我在屏幕上打印出 1 和 0 时,它们都是正确的。但是我需要能够获取一个文件,压缩它并将其输出到另一个文件。
所以我试图做的是将位存储到一个字符中,当我收到它们时,一旦我添加了 8 位,我就会将它打印到新文件中。这对我不起作用。没有任何内容输出到文件中。我认为问题在于某些字节,显然不会对应于任何 ASCII 字符。请问有什么建议吗?
这是我的代码,收到一点,将它添加到一个字符,然后将字符打印到文件一次,它是'填充'
void writeByte(char byte){
FILE *comp;
comp = fopen("compfile.txt" "wb");
fprintf(comp,"%c", byte);
putc(byte,comp);
putchar(byte);
printf("%c\n",byte);
}
void writeBit(int bit){
if(ind >= 0){
byte|=(bit<<ind);
ind--
}
else{//if byte full
writeByte(byte); //write a byte to file;
reset();
writeBit(bit);
}
}
【问题讨论】:
-
你到底为什么要为你想写的每个字节重新打开文件?!
-
如果你关闭它会有所帮助。
标签: c file compression byte