1バイト符号なし整数の読み込み

Fortranでは、1バイト符号なし整数(0~255)を直接扱うことが出来ない(C言語ではunsigned charで使えるが)。
以下の例では、1バイト符号なし整数を格納したファイルhoge.datを変数 hoge_1(200,100)として読み込み、
それを4バイト整数の変数hoge_4(200,100)に変換する手順を示す。
ifortでバイナリを取り扱う時の鉄則でコンパイルオプションで-assume bytereclをします。

PROGRAM Conversion
implicit none
integer*1 :: hoge_1(200,100)
integer :: hoge_4(200,100)
integer :: siz,siza
integer :: num_x, num_y
!Open inputfile and read-------------------------------------
siz=200*100*1
open(40,file="hoge.dat",access='direct',form='unformatted',status='old',recl=siz)
read(40,rec=1) ((hoge_1(num_x,num_y),num_x=1,200),num_y=1,100)
close(40)

!Convert 1 byte unsigned integer to 4 byte integer---------------
do num_y=1,100
  do num_x=1,200
    hoge_4(num_x,num_y)=IAND(INT(hoge_1(num_x,num_y)),255)
  enddo
enddo
END PROGRAM Conversion

ビットごとの論理積を取るIANDが重要です
なお、GrADSに慣れているならばctlファイルで1バイト符号なし整数を指定して、set fwriteで4バイト実数で出力することもできますがそんな面倒なことをするくらいならC言語でやるのが正攻法?

最終更新:2013年07月16日 15:02