簡體   English   中英

Matlab和Fortran之間的數據解釋

[英]Data interpretation between Matlab and Fortran

我有一些解釋二進制文件的Fortran代碼。 由於另一個問題,我問我了解了fortran代碼的工作原理,但是我需要將其更改為MATLAB代碼的幫助。 這是Fortran代碼:

  IMPLICIT NONE

  DOUBLE PRECISION      SCALE

  CHARACTER*72          BLINE
  CHARACTER*72          DATA_FILE_FULL_NAME
  CHARACTER*6           DATA_FILE_NAME

  CHARACTER*4           CH4, CH4F
  REAL*4                RL4
  EQUIVALENCE          (RL4,CH4)

  CHARACTER*2           C2
  LOGICAL               LFLAG

  INTEGER*2             I2

  if(i2.eq.13881) LFLAG=.FALSE.

  c2='69'
  LFLAG=.TRUE.

  DATA_FILE_FULL_NAME='./'//DATA_FILE_NAME//'.DAT'

  OPEN(UNIT=20, FILE=DATA_FILE_FULL_NAME, ACCESS='DIRECT',
 .     RECL=72, status='OLD')
    READ(20,REC=1) BLINE
    CH4f=BLINE(7:10)
    call flip(4,lflag,ch4f,ch4)
    SCALE=RL4

  RETURN
  END  

c   ..................................................
    subroutine flip(n,lflag,ch1,ch2)
c   ..................................................

  integer*4        n, i
  character*(*)    ch1, ch2
  logical          lflag

  if(lflag) then
    do i=1,n
      ch2(i:i)=ch1(n-i+1:n-i+1)
    enddo
  else
    ch2=ch1
  endif

  return
  end   

因此,基本上(我相信我理解正確),Fortran代碼正在檢查字節序,並在機器和數據不匹配時翻轉字節序。 此外,數據存儲在內存中,同時為CH4和RL4保留,因此在定義CH4之后通過調用RL4,可以將數據簡單地轉換為REAL * 4類型而不是CHARACTER * 4類型。 現在,我需要弄清楚如何將其移植到Matlab中。 我已經可以讀取原始數據,但是當我嘗試各種形式的解釋時,總是會得到錯誤的答案。 到目前為止,我已經嘗試過:

fid=fopen(LMK_file,'r');
BLINE=fread(fid, 72,'char=>char');
CH4=BLINE(7:10);
SCALE=single(CH4(1)+CH4(2)+CH4(3)+CH4(4));

SCALE=int8(CH4(1)+256*int8(CH4(2))+256^2*int8(CH4(3))+256^3*int8(CH4(4));

在MATLAB中,但兩者都給了我相同的錯誤答案(這很有意義,因為它的作用幾乎相同)。

有什么建議么?

對於正在尋找該問題答案的其他人,這是我想出的一切,這要歸功於評論中的幫助。

fid=fopen(LMK_file,'r');  %open the file for reading
IGNORE=fread(fid,6,'*char');  %ignore the first 6 bytes.  This could also be performed using fseek
SCALE=fread(fid,1,'*float32','b');  %reading in the scale value as a floating point 32 bit number. 

其中b表示文件的大結尾。 通過使用'* float32'選項,fread自動將接下來的4個字符解釋為32位浮點數。

這將從給定文件返回正確的比例值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM