gpt4 book ai didi

c - 用 C 将一个字节(可能不对应于 ASCII 字符)写入文件

转载 作者:行者123 更新时间:2023-11-30 15:34:37 24 4
gpt4 key购买 nike

我正在用 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);
}
}

最佳答案

fputc似乎是在这里使用的最佳选项,因为您一次只写入一个字符而不是整个缓冲区(fwrite 的作用),并且会节省解析格式字符串的开销(在 fprintf)。

fprintf(comp,"%c", byte); 替换为 fputc(byte, comp);

对您的代码的其他建议:

  1. 每次想要向文件写入字符时,不要fopen同一个文件。您最终可能会花费比实际写入文件多 2 倍的资源来打开文件。打开一次并传入文件描述符。
  2. 您可能应该以不同的方式命名您的 byte 变量。 byte是C++中的一个特殊关键字。即使您的代码是用 C 编写的,并且您可能永远不需要在 C++ 代码中使用它,但它可能会让某些阅读您代码的人感到困惑。

关于c - 用 C 将一个字节(可能不对应于 ASCII 字符)写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23208707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com