我有一个二进制文件,我可以用C读取以下代码
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 :(得分:1)
您的C代码看起来不像通常所说的二进制文件。如果它是C二进制文件,则必须使用隐式使用的STREAM
输入,而不是SEQUENTIAL
。只需尝试正常格式化的列表导向输入。
open(10,file='my_binary_file')
read(10,*) it,par1,par2,par3
read(10,*) ix,par4,par5,par6
如果文件中有更多内容,请显示它。
答案 1 :(得分:1)
在C面
1)对于二进制读取,您的C二进制文件应该打开为“rb”。 2)fscanf不用于读取二进制文件。通常使用fread读取它们。 3)如果有效,则假设它是文本文件
在Fortran一侧, 4)因为它是一个文本文件,所以表格应该是'FORMATTED'。 5)每次在Fortran中读取后,文件指针移动到下一行。这与C中的行为不同。 6)如果你不想弄乱格式语句,请使用自由格式读取来获取数据。