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言語でやるのが正攻法?