私はいくつかの Fortran コードを PHP に変換する任務を負っており、最後のハードルでつまずいています。
基本的に、Fortran は REAL をバイナリ CHAR(4) に変換し、最終的にファイルに書き込みます。
Fortran(これも私を混乱させます)は次のとおりです。
FUNCTION MKS(x)
CHARACTER (LEN=4) :: MKS ! The 4-character string which is returned to
REAL :: x ! The incoming single-precision variable
CHARACTER (LEN=1), DIMENSION(4) :: a ! A working variable
CHARACTER (LEN=4) :: d ! A working variable
CALL MKS1(x,a) ! Send x - get back a(1), a(2), a(3), a(4)
! Note: x will hold the first 32 bits referenced
! and a will hold the next 32 bits
d = a(1) // a(2) // a(3) // a(4) ! concatenate into 1 string (d)
MKS = d ! assign string to variable MKS
END FUNCTION MKS
SUBROUTINE MKS1 (b,c)
IMPLICIT NONE
CHARACTER (LEN=1), DIMENSION(4) :: b ! array with incoming 32 bits
CHARACTER (LEN=1), DIMENSION(4) :: c ! array with each character returned
INTEGER :: i ! DO Loop counter
DO i=1,4
c(i) = b(i)
END DO
END SUBROUTINE MKS1
次のようにphpを使用してこの関数を再作成しようとしました
pack('CCCC', $value & 0x000F,
($value>>8) & 0x000F,
($value>>16) & 0x000F,
($value>>24) &0x000F);
ただし、 *nix od コマンドを使用して出力値を比較すると、まったく異なる結果が表示されます。
Fortran REAL に相当するものを PHP の char[4] 配列にパックする正しい方法は何ですか?