Fortran Tip集

前へ   上へ   次へ

14 C言語等で書き出されたバイナリファイルを読み込む方法

C言語等の言語で書き出されたバイナリファイルをFortranプログラムで読み込む場合は、 open文のform=指定子で「書式なし」を示す'unformatted'を指定し、且つaccess=指定子にFortran 2003から導入された'stream'を指定します。

ここでform='unformatted', access='stream'はC言語のバイナリストリームに相当します。
(なお、form='formatted', access='stream' はC言語のテキストストリームに相当します。)

[ read-binary.f90 ] - バイナリファイルを読み込むサンプル    
[ binary_data.dat ] - サンプル入力データファイル

program read_binary_file
  use iso_fortran_env
  implicit none
  integer (int8) val               ! 1 byte integer
  integer i, unit
  character (100) emsg

  ! ファイルを書式なしストリームとして開く
  open (newunit=unit, file='binary_data.dat', form='unformatted', &
        access='stream', status='old')

  ! ファイルの終端まで読み込む
  i = 1
  do
    read (unit, end=100, err=110, iomsg=emsg) val ! 終了時100へ、エラー時110へ
    write (*, '(2x,z2.2)', advance='no') val      ! 16進2桁で出力する、改行無し
    if (i==8) then
      write (*, '()')                             ! 8個出力する毎に改行
      i = 1
    else
      i = i + 1
    end if
  end do

  ! ファイルを読み込み終了時の処理
100 continue
  if (i==8) write (*, '()')                       ! 最後に改行が必要ならば改行

  ! ファイルを閉じて終了
  close (unit)
  stop

  ! エラー発生時の処理
110 continue
  print *, 'io error: ', trim(emsg)
end program read_binary_file
実行例:
  00  01  02  03  04  05  06  07
  08  09  0A  0B  0C  0D  0E  0F
  10  11  12  13  14  15  16  17
  18  19  1A  1B  1C  1D  1E  1F
  20  21  22  23  24  25  26  27
  28  29  2A  2B  2C  2D  2E  2F
  30  31  32  33  34  35  36  37
  38  39  3A  3B  3C  3D  3E  3F
  40  41  42  43  44  45  46  47
  48  49  4A  4B  4C  4D  4E  4F
  50  51  52  53  54  55  56  57
  58  59  5A  5B  5C  5D  5E  5F
  60  61  62  63  64  65  66  67
  68  69  6A  6B  6C  6D  6E  6F
  70  71  72  73  74  75  76  77
  78  79  7A  7B  7C  7D  7E  7F
  80  81  82  83  84  85  86  87
  88  89  8A  8B  8C  8D  8E  8F
  90  91  92  93  94  95  96  97
  98  99  9A  9B  9C  9D  9E  9F
  A0  A1  A2  A3  A4  A5  A6  A7
  A8  A9  AA  AB  AC  AD  AE  AF
  B0  B1  B2  B3  B4  B5  B6  B7
  B8  B9  BA  BB  BC  BD  BE  BF
  C0  C1  C2  C3  C4  C5  C6  C7
  C8  C9  CA  CB  CC  CD  CE  CF
  D0  D1  D2  D3  D4  D5  D6  D7
  D8  D9  DA  DB  DC  DD  DE  DF
  E0  E1  E2  E3  E4  E5  E6  E7
  E8  E9  EA  EB  EC  ED  EE  EF
  F0  F1  F2  F3  F4  F5  F6  F7
  F8  F9  FA  FB  FC  FD  FE  FF



前へ   上へ   次へ
関連情報
ご案内
© 譌・譛ャ繝九Η繝シ繝。繝ェ繧ォ繝ォ繧「繝ォ繧エ繝ェ繧コ繝�繧コ繧ー繝ォ繝シ繝玲�ェ蠑丈シ夂、セ 2024
Privacy Policy  /  Trademarks