Fortran言語でのバイナリファイル読み書き

Fortran言語では、open文のオプションを指定するとバイナリ形式でファイル入出力できます。

バイナリ出力

      program main                                                      
        implicit none                                                   
        integer, dimension(3) :: a = (/1, 2, 3/)                        
        integer :: err                                                  
        open(10, file='binary.dat', form='unformatted', status='unknown'
     *  , iostat=err)                                                   
        if(err.ne.0)then                                                
          write(*,'("Error: cannot open file binary.dat")')             
         stop 1                                                         
        end if                                                          
        write(10) a                                                     
        close(10)                                                       
        stop                                                            
      end program main                                                  

バイナリ入力

      program main                                                  
        implicit none                                               
        integer, dimension(3) :: a 
        integer :: err
        open(10, file='binary.dat', form='unformatted', status='old'
     *  , iostat=err)
        if(err.ne.0)then
          write(0,'("Error: cannot open file binary.dat")')
          stop 1
        end if 
        read(10) a
        close(10)
        ! check readed array
        write(*,*)'a = ',a
        stop
      end program main

ちなみに、Fortranのバイナリ形式では、1つのwrite文につき8バイトの制御データもファイルに追加されます。
なので上記の例では、4(ヘッダ)+4(integerデータ長)× 3(配列a要素数)+4(フッタ)= 20byte のファイルサイズになります。 (ヘッダとフッタのデータ長は環境依存かも)

f:id:xterm256color:20150528213823p:plain

C/C++言語とか他のプログラムと連携する場合はご注意ください。