fprintf
предназначен для форматированного вывода - форматирование является «читаемым человеком» текстом, поэтому его нельзя использовать, если вы хотите двоичный вывод.Для этого вы должны использовать fwrite()
:
for (i = 0; i < sizeof(array) / sizeof(*array); i++ )
{
fwrite (&array[i], sizeof(*array), 1, outfile ) ;
}
Примечание. Я также исправил завершение вашего цикла, чтобы правильно итерировать количество элементов в массиве.Но на самом деле цикл не нужен - вывод является двоичным, массив - двоичным - вы можете просто вывести весь массив таким образом:
fwrite( array, sizeof(array), 1, outfile ) ;
Ваше требование к производительности в 50 Мбит / с потребует производительности записи около 95 Мбит / с.устойчивый - это много, чтобы спросить, и вряд ли будет достигнуто путем написания одного образца за один раз.Возможно, вам лучше использовать файл с отображенной памятью, но если вы не используете ОС реального времени, нет никаких гарантий, что вы будете поддерживать эту скорость вывода бесконечно - для доступа к диску требуется только другой процесс, и это может привести кнедопустимая задержка.
Также обратите внимание, что файл должен быть открыт для двоичного вывода - особенно в Windows, чтобы предотвратить преобразование CR в CR + LF, что будет иметь катастрофические последствия для ваших примеров данных.