在MATLAB中打开带有混合数据的.gz文件

时间:2014-04-30 18:01:10

标签: c++ matlab

我在C ++程序中创建数据,使用zlib.h库写入.gz文件进行数据压缩,然后尝试使用MATLAB中的数据。如何在混合数据时从文件中读取文件?

extern "C"{
#include <zlib.h>
}


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

int main(void){

    //Notes
    //Minute, second, and hour start at zero
    //Day starts at one

    gzFile *fp;
    fp = (gzFile *)gzopen((char *)"measureinput.dat",(char *)"w9");

    int nMe = 1;
    int yr = 1980;
    int mo = 1;
    int dy = 1;
    int hr = 1;
    int mn = 0;
    int se = 0;
    float mlon = 20.0;
    float mlat = 10.0;
    float lshell = 20.0;
    float dens = 10.0;
    float sig = 1.0;
    gzwrite(fp,&nMe,sizeof(int));   
    gzwrite(fp,&yr,sizeof(int));
    gzwrite(fp,&mo,sizeof(int));
    gzwrite(fp,&dy,sizeof(int));
    gzwrite(fp,&hr,sizeof(int));
    gzwrite(fp,&mn,sizeof(int));
    gzwrite(fp,&se,sizeof(int));
    gzwrite(fp,&mlon,sizeof(float));
    gzwrite(fp,&mlat,sizeof(float));
    gzwrite(fp,&lshell,sizeof(float));
    gzwrite(fp,&dens,sizeof(float));
    gzwrite(fp,&sig,sizeof(float));

    gzclose(fp);
}

1 个答案:

答案 0 :(得分:1)

您可以使用fread在Matlab中读取二进制数据。但是,为此,数据不能被压缩 - 除非您在Matlab中实现解压缩。如果将数据写入的唯一目的是读入Matlab,那么使用gzip是没有意义的。如果您遵循kyamagu的建议使用文本格式,则同样适用;它也不能以压缩形式阅读。

Matlab自己的二进制格式MAT文件确实支持压缩(至少在最近的版本中)。如果压缩对您很重要,那么您可以考虑从C ++代码编写MAT文件。格式记录在http://www.mathworks.de/help/pdf_doc/matlab/matfile_format.pdf。此外,http://www.mathworks.de/help/pdf_doc/matlab/apiext.pdf描述了一个支持编写MAT文件的C / C ++ / Fortran库,它随Matlab一起提供。