2013-04-16 191 views
1

我有,我可以使用C用下面的代碼如何讀取二進制文件,可讀性於C,Fortran中

int it,ix; 
    double par1,par2,par3,par4,par5,par6; 

    fp = fopen("my_binary_file", "r"); 
    assert(fp != NULL); 
    fscanf(fp, "%d %lf %lf %lf \n",&it, &par1, &par2, &par3); 
    fscanf(fp, "%d %lf %lf %lf \n",&ix, &par4 ,&par5,&par6); 

我試圖與該位讀取相同的文件Fortran 90中讀出的二進制文件代碼

real(kind=8):: par1,par2,par3,par4,par5,par6 
    integer :: it,ix 

    open(1,file='my_binary_file',form='unformatted') 

    read(1) it,par1,par2,par3 
    read(1) ix,par4,par5,par6 

但是我得到了文件結尾錯誤。我試着一起讀兩條線

read(1) it,par1,par2,par3,ix,par4,par5,par6 

我讀了一些東西,但參數不是我所期望的。這意味着我正在讀取錯誤的字節或者變量的聲明是錯誤的。你認爲你可以幫忙嗎?

+0

在你的C例子中,你傳遞給'fscanf'的參數以'%'開始是格式說明符。在你的FORTRAN代碼中,你告訴編譯器它將讀取的是UNFORMATTED - 你需要計算出FORTRAN格式指定符是什麼,並將它們提供給FORTRAN代碼中的open命令。 – MoonKnight

回答

1

在C面

1)您的C二進制文件應該已經開闢爲「RB」爲一個二進制讀。 2)fscanf不用於讀取二進制文件。他們通常使用fread讀取。 3)如果有效,假設它是一個文本文件

在Fortran方面, 4)由於它是一個文本文件,所以表單應該是'FORMATTED'。 5)在Fortran中讀取每個文件後,文件指針移至下一行。這與C中的行爲不同。 6)如果您不希望混淆格式語句,請使用自由格式讀取來獲取數據。

1

你的C代碼看起來不像讀取通常所說的二進制文件。如果它是C二進制文件,則必須使用STREAM輸入,而不是SEQUENTIAL,這是您隱式使用的。只需嘗試正常的格式化列表導向輸入。

open(10,file='my_binary_file') 

read(10,*) it,par1,par2,par3 
read(10,*) ix,par4,par5,par6 

如果文件中有更多的內容顯示它。