Мне было интересно .. как вы читаете байты по одному из двоичного файла? В качестве примера я хотел бы читать байты по одному из некоторого двоичного файла, а затем записывать эти точные байты в некоторый выходной файл (в основном, очень простая реализация команды 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
. Я также (несколько бессмысленно) сделал diff
по двум файлам, и, как и ожидалось, они выходят по-другому.
Помощь? Спасибо! -kstruct
UPDATE Спасибо за ответ все .. мой код теперь выглядит следующим образом:
outfile = fopen(argv[1], "wb");
int c;
while ((c = getchar()) != EOF) {
fprintf(outfile, "%c", c);
}
Обычно вы должны читать/записывать блоки «чистых» байтов в C, а не в один байтовый подход. – perreal
@kstruct Ваш обновленный код работает для меня. – ibid