C方法用fread()读取二进制.bin数据

C语言读取MATLAB生成的数据

问题描述:

给出的数据是由MATLAB解析得到的33*33的数组,格式为.mat文件。
由于要使用C语言对数据进行处理,故先将.mat数据以二进制格式保存,在C中用fread读取
首先,在MATLAB中加载.mat数据,将其保存为二进制格式:

fileID = fopen('img1.bin','w');		// 在当前文件夹下生成一个新的二进制文件‘img1’,并以写模式打开
fwrite(fileID, img1, 'double');		// 将img1中的数据以‘double’型写入打开的img1.bin文件中
fclose(fileID);				// 关闭img1.bin文件

以上便是在matlab中的操作,将.mat数据以二进制格式保存在文件夹下

这是我第一次用C代码读取数据,其中费了些周折,先直接看代码吧,有时间再补上我走过的弯路

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

int main(int argc, char*argv[])
{  
    int i = 0, j = 0;
    int row = 33, col = 33;
    int cur = 0;
    int a[2] = {9,25};
    int b[2] = {9,25};
    
    FILE* fp = NULL;
    double** img = NULL;
    //double* imgCen = NULL;
 
    if((fp = fopen("data\\img1.bin","rb"))==NULL)	//“rb”二进制文件以只读方式打开
    {
        printf("Can't Open File!\n");
        exit(EXIT_FAILURE);		// 在stdlib.h中声明
    }
// 这里执行完就打开文件了,接下来分配一个内存空间用于存放文件中的数据
// 由于需要在33*33的矩阵中抠出其中间的部分,因此这里给img分配了二维数组空间

    img = new double*[row]();
    for(i = 0; i < row; i++)
        img[i] = new double[col]();
//将fp指向的文件中的数据读取到img中
    for(i = 0; i < col; i++)
    {
        fseek(fp, i*row*sizeof(double), SEEK_SET);
        cur = ftell(fp);
        fread(img[i],sizeof(double),col,fp);
    }
    fclose(fp);
    fp = NULL;
    //imgCen = ReadCenture(img,imgCen,a,b);
    //delete imgCen;
    //img = NULL;
    delete img;
    img = NULL;
    
    return 0;
}

写了一个小函数来抠中间的数组的,有时间一定要补

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值