C fwrite输出在Matlab中无法正确显示

时间:2014-10-13 08:13:45

标签: c matlab fwrite

我有这个简单的代码:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>


int main(int argc, char * argv[]){

    int N = 4;
    int *A =  malloc( N * sizeof( *A ) );


    for ( int i = 0 ; i < N; i++ ) 
        A[ i ] = i;


    FILE * theFile;
    theFile = fopen( "theA", "wb" );
    assert( NULL != theFile );
    fwrite( A , sizeof( int ) , N , theFile );
    fclose( theFile );


    return 0;
}

现在,如果我在matlab中加载文件,它会显示:

 0     0     0     0     1     0     0     0     2     0     0     0     3     0     0     0

如果我使用此代码来读取文件:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>


int main(int argc, char * argv[]){

    int N = 4;
    int *A = malloc( N * sizeof( *A ) );


    FILE * theFile;
    theFile = fopen( "theA", "wb" );
    assert( NULL != theFile );
    fread( A , sizeof( int ) , N , theFile );
    fclose( theFile );

     for ( int i = 0 ; i < N; i++ ) 
        printf("\nA = %d",A[ i ] );



    return 0;
}

它显示:

A = 0
A = 0
A = 0
A = 0

有任何解释吗?

在matlab我正在使用:

 fid = fopen('theA','rb')
 A = fread(fid);

3 个答案:

答案 0 :(得分:2)

当你想阅读时,你打开了要写的文件:

theFile = fopen( "theA", "wb" );
                          ^
                          |
                         FAIL

制作"rb"

当然,你应该检查来自I / O功能的返回值,如果你这样做,你会得知fread()失败了,所以打印的值并不意味着任何东西。 I / O可以(并且会!)以有趣和教育的方式失败,始终检查返回值。

答案 1 :(得分:2)

第二部分:

应该是:

theFile = fopen( "theA", "rb" );

而不是:

theFile = fopen( "theA", "wb" );

答案 2 :(得分:2)

您需要在Matlab中指定precision参数,否则默认情况下,Matlab fread将逐字节读取。

  

默认值:'uint8 =&gt; double'

我的C生锈但我想类int投了一个32位有符号整数。您必须将此信息告知Matlab,否则它将使用上述默认解释。

所以在Matlab中,只需:

fid = fopen('theA','rb')
A = fread(fid , 'int32' );
fclose(fid) ;

这将导致:

A =
     0
     1
     2
     3

哪个应该是您的正常输出(至少它是您最初在文件中写的内容)。