リトル・エンディアン - ビッグ・エンディアンの変換機能は、Fortran 書式なし入力/出力の演算のためのものです。この機能は、ビッグ・エンディアン・データ編成を持つファイルの開発および処理を有効にします。
また、ビッグ・エンディアン・ データ形式を受け入れるプロセッサ上で開発されたファイルの処理および IA-32 ベースのリトル・エンディアン・システム上のそのようなプロセッサ用のファイルの作成を有効にします。
リトル・エンディアン - ビッグ・エンディアンへの変換は、次の操作によって実現されます。
WRITE操作は、リトル・エンディアン形式をビッグ・エンディアン形式に変換します。
READ操作は、ビッグ・エンディアン形式をリトル・エンディアン形式に変換します。
リトル・エンディアン - ビッグ・エンディアンの変換機能を使用するためには、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 よりも少ない値です。
シェル内の変数設定のコマンドライン:
Sh: export F_UFMTENDIAN=MODE;EXCEPTION
Note
セミコロンがある場合は、環境変数値が引用符で囲まれていなければなりません。
その他の環境変数設定
また、環境変数には次の構文があります。
F_UFMTENDIAN=u[,u] ...
シェル内の変数設定のコマンドライン:
Sh: export F_UFMTENDIAN=u[,u] ...
1. F_UFMTENDIAN=big
すべての入力/出力操作でREAD 上では、ビッグ・エンディアンからリトル・エンディアンへの変換、WRITE 上ではリトル・エンディアンからビッグ・エンディアンへの変換を実行します。
2. F_UFMTENDIAN="little;big :10,20"
または F_UFMTENDIAN=big :10,20
または F_UFMTENDIAN=10,20
この場合、ユニット番号が 10 および 20 で、入力/出力演算はビッグ・エンディアン - リトル・エンディアンの変換を実行します。
3. F_UFMTENDIAN="big;little:8"
この場合、ユニット番号 8 では変換操作は行われません。その他のすべてのユニットで入力/出力演算はビッグ・エンディアン - リトル・エンディアンの変換を実行します。
4. F_UFMTENDIAN=10-20
変換目的で、10、11、12 … 19、 20 ユニットを定義します。 これらのユニットでは、入力/出力演算は、ビッグ・エンディアン - リトル・エンディアンの変換を実行します。
5. F_UFMTENDIAN=10,100 を設定して、次のプログラムを実行したとします。
integer*4 cc4
integer*8 cc8
integer*4 c4
integer*8 c8
c4 = 456
c8 = 789
C prepare little endian representation of data
open(11,file='lit.tmp',form='unformatted')
write(11) c8
write(11) c4
close(11)
C prepare 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
これらのファイルでは、バイトの順番が異なることがわかります。