К сожалению, нет стандартного значения unformatted
.Но некоторые методы более распространены, чем другие.
Во многих версиях Fortran, которые я использовал, каждая команда write
записывает заголовок (часто без знака int 32) количества байтов данных, затем данных, затемповторяет значение заголовка в случае, если вы читаете сзади.
Из предоставленных вами значений может быть, что у вас есть что-то вроде этого:
- uint32 (заголовок record1), вероятно 12.
- float32, float32, int32 (три «других значения», о которых вы говорили)
- uint32 (заголовок record1, такой же, как первое значение)
- uint32(заголовок записи 2, вероятно, 512 ^ 3 * 4)
- float32 * 512 ^ 3
- uint32 (заголовок записи 2, такой же, как и раньше)
Возможно, вам придетсяпроверьте порядковый номер.
Поэтому я предлагаю вам открыть файл в программе hexdump и проверить, идентичны ли байты 0-3 байтам 16-19 и повторяются ли байты 20-23 в конце данных.снова.
Если это так, я постараюсь проверить порядковый номерпосмотрите, являются ли значения прямым или младшим, и, если повезет, ваши данные будут у вас.
Примечание: Я предполагаю, что эти три других значения являются метаданными о данных, ипоэтому будет в начале файла.Если это не так, они могут быть в конце.
Обновление:
В своем комментарии вы пишете, что ваши данные начинаются с чего-то вроде этого:
0C 00 00 00 XX XX XX XX XX XX XX XX XX XX XX XX 0C 00 00 00
^- header-^ ^-header -^
E8 09 FF 1F (many, many values) E8 09 FF 1F
^- header-^ ^--- your data ---^ ^-header -^
Теперь я не знаю, как читать данные в C. Я оставляю это на ваше усмотрение.Вам нужно пропустить первые 24 байта, а затем прочитать данные как (вероятно, с прямым порядком байтов) 4-байтовые плавающие значения.У вас останется 4 байта, которые вам больше не нужны.
Важное примечание: Fortran хранит массивы столбцов-мажоров, Cafaik хранит их мажор-строк.Так что имейте в виду, что порядок индексов будет обратным.
Я знаю, как читать это на Python:
from scipy.io import FortranFile
ff = FortranFile('data.dat', 'r', '<u4')
# read the three values you are not interested in
threevals = ff.read_record('<u4')
# read the data
data = ff.read_record('<f4')
ff.close()