【发布时间】:2012-03-23 05:42:33
【问题描述】:
我想知道..您如何从二进制文件中一次读取一个字节?例如,我想从某个二进制文件中一次读取一个字节,然后将这些确切的字节写入某个输出文件(基本上是 cp 命令的一个非常基本的实现)。我当前的 C 代码如下所示:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char**argv)
{
if (argc != 2) {
fprintf(stderr, "Usage: %s <output file>\n", argv[0]);
return 1;
}
FILE *outfile;
outfile = fopen(argv[1], "w");
unsigned char c;
char temp;
int tracker = 0;
// Use temp because unsigned char will never be EOF
while ((temp = getchar()) != EOF) {
c = (unsigned char) temp;
fprintf(outfile, "%c", c);
}
fclose(outfile);
return 0;
}
我这样运行程序:./main output.au < sample.au(.au 是一个音频文件)
但是,我在output.au 文件中得到的只是一堆重复的“^@”。我可以正常播放sample.au 音频文件,但不能播放output.au。我还(有点毫无意义地)对这两个文件做了一个diff,正如预期的那样,它们的结果不同。
帮助? 谢谢! -kstruct
更新 感谢大家的回复.. 我的代码现在看起来像:
outfile = fopen(argv[1], "wb");
int c;
while ((c = getchar()) != EOF) {
fprintf(outfile, "%c", c);
}
【问题讨论】:
-
通常你会在 C 中读/写
pure字节块,而不是单字节方法。 -
@kstruct 你更新的代码对我有用。