gpt4 book ai didi

linux - Bin 数据在 AIX 和 Linux 中的读取方式不同

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:09 25 4
gpt4 key购买 nike

我有一个包含斜率和截距的 .bin 文件。我使用 Fortran 来读取值,但在运行 AIX 和 Linux 的机器上得到了不同的值。我相信 Linux 数据是准确的。这与堆栈大小或字节序有关吗?

例如AIX最大值为:0.3401589687E+39 而Linux最大值为:6.031288

program read_bin_files

REAL :: 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, IOSTAT=iostat)

READ(unit=8, REC = 1, IOSTAT = iostat) slope
print *, "Max slope value is:", maxval(slope)

CLOSE(8)

end

最佳答案

AIX(目前)在 POWER CPU 上运行,它们通常大端,而 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

在每一行中,右半边是左半边的镜像。这表明问题字节序。我们仍然不知道哪种字节顺序是正确的。该问题的答案几乎肯定是“运行生成文件的程序的 CPU 使用的字节顺序。”

如果您使用的是 GNU Fortran,the CONVERT specifier to OPEN应该可以解决问题,前提是您可以找出应该解释数据的方式。不过,我认为那是一个扩展。在一般情况下,我对 FORTRAN 的了解还不够多,无法告诉您该怎么做。

如果您可以控制生成这些数据文件的过程,则可以通过将双方切换为自描述数据格式(例如 HDF)来避免将来出现整个问题。 .

关于linux - Bin 数据在 AIX 和 Linux 中的读取方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38576067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com