gpt4 book ai didi

c - 在 C 中读取 "pure"字节

转载 作者:太空宇宙 更新时间:2023-11-04 00:32:17 25 4
gpt4 key购买 nike

我想知道.. 你如何从二进制文件中一次读取一个字节?例如,我想从某个二进制文件中一次读取一个字节,然后将这些确切的字节写入某个输出文件(基本上是 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在这两个文件上,正如预期的那样,它们的结果不同。

帮助?谢谢!-构造

更新感谢大家的回复..我的代码现在看起来像:

outfile = fopen(argv[1], "wb");

int c;
while ((c = getchar()) != EOF) {
fprintf(outfile, "%c", c);
}

最佳答案

getchar() 返回一个 int。您将该 int 分配给 char 类型的变量,从而丢失信息。 不要那样做。

temp 声明为 int,然后摆脱强制转换。

关于c - 在 C 中读取 "pure"字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9571950/

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