私は疑問に思っていました。バイナリファイルから一度に1バイトずつどのように読み込みますか?例として、いくつかのバイナリファイルからバイトを1つずつ読み込んで、その正確なバイトをある出力ファイルに書きたいとします(基本的にはcp
コマンドの非常に基本的な実装です)。私の現在のCコードは次のようになります。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
は再生できません。私はまた、2つのファイルについてdiff
を(多少無意識に)実行しました。予想どおり、別々に出てきます。
ヘルプ? ありがとう!私のコードは今のように見える...返信みんなのために おかげUPDATE
-kstruct :
outfile = fopen(argv[1], "wb");
int c;
while ((c = getchar()) != EOF) {
fprintf(outfile, "%c", c);
}
通常、シングルバイトのアプローチではなく、Cの '純粋な'バイトのブロックを読み書きします。 – perreal
@kstructあなたの更新されたコードは私に役立ちます。 – ibid