2015-02-07 3 views
-2

У меня возникли проблемы с чтением некоторых поплавков из созданного двоичного файла c. Результаты выводятся иначе, чем ожидалось при чтении в программу fortran. Мне нужны предложения, как это сделать.Чтение поплавка из двоичного файла C в fortran

Это не дубликат. У меня есть файл в C, и я хочу, чтобы прочитать его в Fortran:

файл данных C -> Читайте в Fortran кодекса

+0

вы используете поток ввода/вывода, чтобы пропустить длина записи обычно добавлено Fortran? Существует много предыдущих вопросов/ответов: например, http://stackoverflow.com/questions/8751185/fortran-unformatted-file-format, http://stackoverflow.com/questions/11569644/can-fortran-read-bytes -directly-from-a-binary-file, http://stackoverflow.com/questions/15190092/how-do-i-read-fortran-binary-file-in-c –

+0

Im новый fortran только начал использовать его 2 дня назад. Я открываю файл с помощью 'open (12, file = c, form = 'unformatted', access = 'stream', 1 status = 'old')' Я читаю данные последовательно в файле, это работает нормально, я прочитали в unsigned chars, unsigned longs до и после поплавков, и они отлично работают. – RobBalmbra

+0

Чтение двоичных данных, таких как числа с плавающей запятой, которые были написаны другой системой или языком, может быть затруднено. Вам нужно найти подробную информацию о формате C, который был написан, а затем выяснить, как читать его в Fortran. В качестве альтернативы, разработайте подробный формат того, что может прочитать Fortran, а затем сделать запись C в этом формате. Stackoverflow - это не бесплатная служба написания кода, вы должны сами попытаться ответить на свой вопрос и показать свои попытки. Прочтите страницы справки, связанные сверху каждой страницы Stackoverflow. – AdrianHHH

ответ

0

Когда вы пишете() бинарная запись в FORTRAN, макет записи является:

length_of_data binary_data length_of_data 

, где length_of_data представляет собой 4-байтовое целое число, указывающее количество байт binary_data.

Конечно, когда вы читаете(), ожидается тот же формат.

В Си FWRITE() будет просто поставить недекорированные двоичные данные

binary_data 

Таким образом, вы должны либо имитировать формат FORTRAN из C FWRITE(), или вызвать функцию C из FORTRAN для выполнения Fread() ...

EDIT Мой ответ на FORTRAN до 95. См замечание @camelcc решение в Фортран 2003 (Writing out a binary file from fortran and reading in C)

+1

Это намного сложнее и варьируется от компилятора к компилятору. Например, вы также можете использовать прямой доступ даже в старом Fortran, а некоторые компиляторы не помещают какие-либо вещи между записями, но им разрешено это делать. Кроме того, вы забываете, что формат должен поддерживать записи размером более 4 ГБ. –

Смежные вопросы