AIX работает (в эти дни) на СИЛОВЫХ процессоров, которые обычно большой обратный порядок байт, в то время как Linux обычно работает на x86es, которые являются малорисковыми. Поэтому вы правы, чтобы подозревать, что проблема может быть проблемой. Вы сообщаете, что результат работы этой программы
program read_bin_files
INTEGER*4 :: slope(2500,1250)
INTEGER :: recl=2500*1250*4
OPEN(UNIT=8, FILE='MODIS_AVHRR_years_slope.bin', ACTION='READ', &
ACCESS='direct', FORM='unformatted', RECL=recl)
READ(unit=8, REC = 1) slope
DO i = 1, 10
WRITE(*, '(Z8.8)') slope(1, i)
END DO
CLOSE(8)
end
заключается в следующем. («AIX» и «Linux» в кавычки в заголовках столбцов, потому что это CPU, что здесь имеет значение, а не операционной системы.)
"Linux" | "AIX"
------------+------------
3E C2 61 8F | 8F 61 C2 3E
3E F5 64 52 | 52 64 F5 3E
BC F3 E0 7E | 7E E0 F3 BC
BF B9 71 0D | 0D 71 B9 BF
3E F5 B9 73 | 73 B9 F5 3E
3F 29 3C 2F | 2F 3C 29 3F
3E DC C2 09 | 09 C2 DC 3E
3F 66 86 89 | 89 86 66 3F
3E 5B 91 A9 | A9 91 5B 3E
3F 67 73 25 | 25 73 67 3F
В каждом ряду, правая половина является зеркальным образ левой половины. Это свидетельствует о том, что вопрос is endianness. Мы еще не знаем, какой порядок байтов правильный. Ответ на этот вопрос почти наверняка будет «порядком байтов, используемым процессором, который запускал программу, которая сгенерировала файл».
Если вы используете GNU Fortran, the CONVERT specifier to OPEN должен решить эту проблему, если вы можете выяснить, какой путь вокруг данных предполагается интерпретировать. Однако, я думаю это расширение. В общем случае я не знаю, достаточно ли FORTRAN, чтобы рассказать вам, что делать.
Если у вас есть контроль над процессом, генерирующим эти файлы данных, вы можете избежать всей проблемы в будущем, переключив обе стороны в самоописывающийся формат данных, например HDF.
Почему бы не использовать 'stream' пункт доступа и избежать' recl' все вместе? У вас есть доступ к современному компилятору Fortran (2008+)? Если это так, используйте спецификатор 'newunit'. – jlokimlin