比方說,我有一個模塊:參數編碼文件
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