比方说,我有一个模块:参数编码文件
module testParam
real, parameter :: x=1.0, xx=10.0
real, parameter :: pi=3.14
end module testParam
与
gfortran -c testParam.f90
编译它,并期待在生成的模块文件
cp testparam.mod testparam.gz
gunzip testparam.gz
修整后的输出是:
(2 'pi' 'testparam' '' 1 ((PARAMETER UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
IMPLICIT-SAVE 0 0)() (REAL 4 0 0 0 REAL()) 0 0() (CONSTANT (REAL 4 0
0 0 REAL()) 0 '[email protected]')() 0()() 0 0)
4 'x' 'testparam' '' 1 ((PARAMETER UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
IMPLICIT-SAVE 0 0)() (REAL 4 0 0 0 REAL()) 0 0() (CONSTANT (REAL 4 0
0 0 REAL()) 0 '[email protected]')() 0()() 0 0)
5 'xx' 'testparam' '' 1 ((PARAMETER UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
IMPLICIT-SAVE 0 0)() (REAL 4 0 0 0 REAL()) 0 0() (CONSTANT (REAL 4 0
0 0 REAL()) 0 '[email protected]')() 0()() 0 0)
然后我们可以看到x的值被存储为'[email protected]',pi被存储为'[email protected]',xx被存储为'[email protected]'。我怎样才能将字符串编码参数转换回数字?
考虑到我最初假定的x项的值很简单,对于格式a @ b,a * 10^b但是pi的值是十六进制编码的(对于xx变量int(0xa)== 10.0因此至少它的一部分是十六进制)。也许它的某种十六进制编码浮点数?
哪个版本的gfortran?虽然说实话,我这样做的方式可能是'use testParam;打印*,x;结束等等。 – francescalus
5.3.1,我也是,但我正在编写一些代码,使用mod文件来确定模块在没有“运行”的情况下在做什么。 – Rob
它看起来像一种转储单精度浮点值的二进制形式的形式,并且有些分解了一些位。 “0”之间的部分。而“@”显然是尾数。我可能猜测“@ 1”以某种形式或方式表示指数,但用数字表示非零指数会更清楚。 – Craig