使用C++将数据输出.mat文件

使用C++将数据输出.mat文件

1、工程描述

本工程先使用matlab生成.mat文件,产生一组随机数据。之后将该.mat文件导入到使用C++编写的工程中去,取出数据之后经过处理生成一组新的数据。

功能已经封装完毕,读者可以根据需要直接使用其中的一部分程序或文件。

2、工程使用的软件和环境

操作系统:**Windows 10**
VS:**VS2019**
matlab:**matlab2018a**

3、matlab程序

因为matlab仅仅用来生成数据,此处直接生成10000个0到1之间的随机实数,matlab程序如下图,第一行用来生成数据,第二行用来将矩阵R转置,这样输出的矩阵R为1行10000列,第三行将生成的矩阵R直接导入到.mat文件中。

R = rand(10000,1);
R=R';
save matfile5 R

4、环境配置

环境变量:系统变量->PATH->编辑 弄完需要重启才能生效

此电脑---->右键----->属性
使用C++将数据输出.mat文件_第1张图片

使用C++将数据输出.mat文件_第2张图片

使用C++将数据输出.mat文件_第3张图片

接下来的部分是在VS中项目的属性页面就行修改

C++ 常规使用C++将数据输出.mat文件_第4张图片

链接器->常规->附加库目录
使用C++将数据输出.mat文件_第5张图片

链接器->输入->附加依赖项

libmat.lib

libmx.lib

libmex.lib

libeng.lib

使用C++将数据输出.mat文件_第6张图片

5、代码

代码的GitHub链接:GitHub

代码片段就给个这个import_mat.cpp了,剩下的可以去我的GitHub链接里面自取,CSDN不知道为啥只能两三行两三行的粘贴

#include "iostream"
#include "import_mat.h"
#include "mat.h"
#include  /* For strcmp() */

MATFile* pmatfile_w = nullptr;
mxArray* pMxArray_w = nullptr;
uint16 col=0, row = 0;  //col为行,row为列
const char* file = "mattest.mat";
//初始化
void mat_init(uint16 x,uint16 col_local, uint16 row_local)
{
 row = row_local;
 col = col_local;
  pmatfile_w = matOpen(file, "w");  //打开文件并写入数据
 //if (!pmatfile_w)  //没有正常生成文件
  //TODO: 当没有正常生成文件时所作的处理
   /*if(!(x%row))
  col = x / row ;
 else if(x%row)
  col = x / row + 1;
 */
 }
/*
mxArray *pa2 = mxCreateDoubleMatrix(3,3,mxREAL);  //第一个数为待申请的行数,第二个为待申请的列数,mxREAL表示为实数数组
memcpy((void *)(mxGetPr(pa2)), (void *)data, sizeof(data)); //将data数组中的数据拷贝到pa2中
int status = matPutVariableAsGlobal(pmat, "GlobalDouble", pa2); //写入文件
*/
//导入数据,数据为数组,入股一开始为元素需要先弄成数组
void import_data_array(double* data, uint16 num)
{
  pMxArray_w = mxCreateDoubleMatrix(col, row, mxREAL);  //第一个数为待申请的行数,第二个为待申请的列数,mxREAL表示为实数数组
  memcpy((void*)(mxGetPr(pMxArray_w)), (void*)data, sizeof(double)*num); //将data数组中的数据拷贝到pa2中
    //if (!pMxArray_w)
   //TODO: 当指针并未正常指向数据时所做的处理
  int status = matPutVariableAsGlobal(pmatfile_w, "GlobalDouble", pMxArray_w); //写入文件
}
//关闭文件,释放内存
void mat_exit()
{
 matClose(pmatfile_w);        //关闭文件
}

6、后记

这个项目主要还是环境变量那块花费的时间有点多,网上有很多不同的方法但是有很多在我这并不好使,在经过学习摸索之后终于实现了。
鄙人才疏学浅,学的内容可能会有是诸位读者无法理解或者不清楚甚至有问题的地方,希望诸位可以指点指点。
转载的时候请注明出处!
那咱们评论区见!

你可能感兴趣的:(C++,c++,matlab)