在阅读这篇博文前,请大家先阅读我的上一篇博文,因为这篇博文的思路来自于我的上一篇博文,链接如下:
https://blog.csdn.net/wenhao_ir/article/details/51007255
下面直接说将C/C++程序的变量数据导入到MATLAB中的方法:
先上VC导出变量数据的代码:
#include <fstream>
using namespace std;
int main()
{ int a[6]={1,2,3,4,5,6};//注意:这里的类型一定要是int,如果设为char那用ocout<<a[i]输出来的全是字符!
unsigned char i;
ofstream ocout;
ocout.open("123.txt");
for(i=0;i<6;i++)
{
ocout<<a[i];
ocout<<" ";
}
ocout.close();
return 0;
}
很简单吧~
运行结果是:
123.txt中的内容为:
1 2 3 4 5 6
所以从VC中导出数据是很简单的,接下来说怎样把变量数据导入到MATLAB中。
在这里,我们想利用从C/C++程序中导出的数据生成下面的矩阵:
1 2 3
4 5 6
源码如下:
%此程序用于学习如何把C++的变量数据导入到MATLAB中
%作者微信/QQ 2487872782
%有问题可以联系作者交流
fid=fopen('F:\material\data\123.txt','r');
[C1,count]=fscanf(fid,'%d',[3,2]);
C2=C1';%C2是C1的转置矩阵
fclose(fid);
上面的代码中,
为什么我们不把函数fscanf()的第三个参数直接写成[2,3]呢?
又为什么最终我们需要的矩阵C2要经C1转置得到呢?
这是因为MATLAB不管是导出矩阵到向量还是由向量导入矩阵,都是按列来进行的,即按从上到下,从左到右的顺序进行导出或填充的!
如果不明白这句话,大家看下C1和C2的内容截图就知道了。
值得注意的是,得到矩阵后,默认的是double类型,我们还应该根据我们的需要对矩阵的数据类型进行强制类型转换!比如C2=uint8(C2);这样的强制类型转换语句!