リトル・エンディアン - ビッグ・エンディアンの変換機能は、Fortran 書式なし入力/出力の演算のためのものです。この機能は、リトル・エンディアンおよびビッグ・エンディアン・データ編成を持つファイルの開発と処理を有効にします。
F_U7FMTENDIAN 環境変数は、プログラムの開始時に 1 度だけ処理されます。特定のユニットまたはすべてのユニットに対してこの環境変数が指定した内容は、プログラムの終了時まで継続されます。
F_UFMTENDIAN 環境変数を設定して、変換に使用されるユニット数を指定します。その後、このユニット数を使用する READ/WRITE 文が対応する変換を実行します。他の READ/WRITE 文は、通常どおり動作します。
一般的に、変数はセミコロンで分割される 2 つの部分で構成されます。F_UFMTENDIAN 値の中では、スペースは使用できません。
F_UFMTENDIAN=MODE | [MODE;] EXCEPTION
説明:
MODE = big | little EXCEPTION = big:ULIST | little:ULIST | ULIST ULIST = U | ULIST,U U = decimal | decimal -decimal
MODE は、現在のデータ形式を定義し、ファイルで表現されます。省略できます。
キーワードの little は、データがリトル・エンディアン形式であり、変換されないことを意味します。これはデフォルトです。
キーワードの big は、データがビッグ・エンディアン形式であり、変換されることを意味します。
EXCEPTION は、MODE.EXCEPTION キーワード (little または big) の例外リストの定義に使用し、EXCEPTION リストからのユニットを結合するファイル内のデータ形式を定義します。この値は、リストされたユニットの MODE 値を無効にします。
EXCEPTION キーワードとコロンは省略できます。キーワードが省略されたときのデフォルトは、big です。
各リストメンバーの U とは、シンプルユニット番号またはユニット番号です。リストメンバーの上限は、64 です。
decimal は、負でない小数で 232 よりも小さな値です。
変換されたデータは、基本型または基本型の配列です。派生データ型は無効です。
リトル・エンディアンからビッグ・エンディアンへの変換中に、エラーメッセージが表示される場合があります。これらのエラーは、すべて致命的なエラーです。
シェル内の変数設定のコマンドライン (Linux):
Sh: export F_UFMTENDIAN=MODE;EXCEPTION
セミコロンがある場合は、環境変数値を引用符で囲む必要があります。
また、環境変数には次の構文があります。
F_UFMTENDIAN=u[,u] . . .
F_UFMTENDIAN=big
すべての入力/出力操作で、READ ではビッグ・エンディアンからリトル・エンディアンへの変換、WRITE ではリトル・エンディアンからビッグ・エンディアンへの変換を実行します。
F_UFMTENDIAN="little;big:10,20"
または F_UFMTENDIAN=big:10,20
または F_UFMTENDIAN=10,20
入力/出力操作は、ユニット番号 10 から 20 に対してビッグ・エンディアンからリトル・エンディアンへの変換を実行します。
F_UFMTENDIAN="big;little:8"
上記の変換操作は、ユニット番号 8 に対して行われません。入力/出力操作は、その他のすべてのユニットに対してビッグ・エンディアンからリトル・エンディアンへの変換を実行します。
F_UFMTENDIAN=10-20
入力/出力操作は、ユニット 10、11、12 ... 19、20 に対してビッグ・エンディアンからリトル・エンディアンへの変換を実行します。
F_UFMTENDIAN=10,100 を設定して、次のプログラムを実行したとします。
integer*4 cc4 integer*8 cc8 integer*4 c4 integer*8 c8 c4 = 456 c8 = 789 C prepare a little endian representation of data open(11,file='lit.tmp',form='unformatted') write(11) c8 write(11) c4 close(11) C prepare a big endian representation of data open(10,file='big.tmp',form='unformatted') write(10) c8 write(10) c4 close(10) C read big endian data and operate with them on C little endian machine. open(100,file='big.tmp',form='unformatted') read(100) cc8 read(100) cc4 C Any operation with data, which have been read C . . . close(100) stop end |
lit.tmp ファイルと big.tmp ファイルを od ユーティリティーで比較します。
> od -t x4 lit.tmp 0000000 00000008 00000315 00000000 00000008 0000020 00000004 000001c8 00000004 0000034 > od -t x4 big.tmp 0000000 08000000 00000000 15030000 08000000 0000020 04000000 c8010000 04000000 0000034
これらのファイルでは、バイトの順番が異なることがわかります。