将MATLAB的变量数据导入到C/C++程序中的方法
怎样将将MATLAB的变量数据导入到C/C++程序中?
最开始,我想在VC中直接调用MATLAB-Workspace中的变量,即通过混合编程的方式来实现将MATLAB的变量数据导入到VC中,如果以后还需要这种方法,可以参考以下资料:
http://www.tuicool.com/articles/eQBrQva (需登陆后才能查看,帐号 2487872782@qq.com 密码jxke4sss)
http://blog.sina.com.cn/s/blog_67d069a90100q37c.html (博主2022-04-15注:新浪博客基本快死了,所以看不了,这个没办法)
混合编程这种方法要求先在VC中添加“include”文件,并加一些库文件~
详细的配置可以参考这个word文档 链接:http://pan.baidu.com/s/1gfdeVLp 密码:5tg5
第一个链接中的例程我是实现了的,然而运用到自己的程序中就完全不行了,而且这种混合编程,MATLAB只会出来一个控制台,workspace、windows之类的窗口完全没有,操作起来很不方便。
一番折腾后,最后得出的经验是,不到万不得已,不要用混合编程。
当然,让我坚定不用跨平台、跨语言的方法还是我在网上看到以下这段文字:
不要做A语言代码修改为B语言代码的无用功。
也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。
只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。
即可很方便地让A、B两种语言之间协调工作。
比如:
A将请求数据写到文件a.txt,写完后改名为aa.txt
B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt
A发现bb.txt存在时,读取其内容,读完后删除bb.txt
以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。
除非A或B不支持判断文件是否存在、文件读写和文件更名。
但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢?
“跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边,
回头是“使用共享纯文本文件进行信息交流”的岸!
所以可见,一般来说,最好的方法还是把MATLAB的变量输出到txt文件中,然后再让VC去调这个txt文件,下面具体说下我这次的做法。具体的代码如下:
clear all;
a=[1,2,3;4,5,6;7,8,9];
fid=fopen('C:\Users\Administrator\Documents\MATLAB\write_data.txt','wt');
fprintf(fid,'%g ',a);
fclose(fid);
上面的代码中我要说明下w和wt的区别,如下:wt是打开文件以文本格式写入。”w“是打开文件用户写入,一般缺省时以二进制格式写入。w与wt最明显的区别是有些时候(并不是所有时候)对于\n和空格等,前者没有效果,不会换行,也不会输出空格而后者会。没有换行,没有空格,肯定不是我们想要的,因为如果没有这些生成的txt的数据将没有空格的连成一片,所以我们要将参数写成wt。另外w和w+的区别在于前者只能写,后者又能读又能写!所人上面程序中的参数又能写成w+t
运行上面的程序后,我们发现生成的write_data.txt中的结果为:1 4 7 2 5 8 3 6 9 我们发现,MATLAB是按列向量输出矩阵数据的,这显然不是我们需要的行向量,我们需要的是1 2 3 4 5 6 7 8 9怎么办呢?其实很简单,把a转置一下不就行了,修改程序如下:
clear all;
a=[1,2,3;4,5,6;7,8,9];
a=a';
fid=fopen('C:\Users\Administrator\Documents\MATLAB\write_data.txt','wt');
fprintf(fid,'%g ',a);
fclose(fid);
上面这段程序的输出结果就是 1 2 3 4 5 6 7 8 9
接下来,就是把这个包含变量数据的write_data.txt引入到VC中,方法如下:
1 修改write_data.txt的后缀名为write_data.h
2 将write_data.h放入VC的某个include路径下
3 在cpp文件包含头文件的地方写上#include <owrite_data.h> 这句语句
4 修改write_data.h的内容为 int[9] a={1,2,3,4,5,6,7,8,9};或char[9] a={1,2,3,4,5,6,7,8,9};等...反正要定义成什么类型和变量名取什么完全看自己的需要!这里要特别注意这对花括号的输入方法,最好是从经测试无误的cpp文件中复制到这个头文件中,我有一次就是自己在txt中输入这个花括号,结果老是 报错!另外在C程序中一定要以逗号隔开数字啊,空格是不行的!
5 在程序中引用数组a即可。
当然,更专业的利用文件传递小量数据的方法可以参看我写的另一篇博文,链接如下:
https://blog.csdn.net/wenhao_ir/article/details/123413248
如果数据量大,博主想到的思路是用建立数据库的方法,诸君认为呢?
相关文章
- 【C++ Primer每日刷】之三 标准库 string 类型
- C/C++获取指定网口的IP地址
- 设计模式C++实现——工厂方法模式
- [c++菜鸟]《Accelerate C++》习题解答
- 【MATLAB教程案例85】通过matlab实现有限差分法求解微分方程
- 【MATLAB教程案例82】matlab在大学数学中的应用——概率统计
- 【MATLAB教程案例61】使用matlab实现基于ResNet残差网络的数据分类仿真分析
- 【MATLAB教程案例50】通过VisualSFM工具箱提取360度等间隔环绕拍摄得到的图像序列点云数据,并进行目标三维重建matlab仿真
- 【MATLAB教程案例47】基于双目相机拍摄图像的三维重建matlab仿真
- 【MATLAB教程案例44】通过matlab学习三维曲面的建模,颜色,透明度,动态变化等——以海浪曲面函数为例
- 【MATLAB教程案例29】基于Baker映射和Logistic混沌序列的图像加解密matlab实现
- 【MATLAB教程案例11~20总结】优化类算法matlab仿真经验和技巧总结
- 【MATLAB教程案例14】基于ACO蚁群优化算法的函数极值计算matlab仿真及其他应用
- 【MATLAB教程案例12】基于GA遗传优化算法的函数极值计算matlab仿真及其他应用
- 【MATLAB教程案例8】基于LS算法的OFDM调制解调系统信道估计和均衡算法的matlab仿真
- 【CUDA7.5】MATLAB中配置Win7+Matlab R2015b+CUDA7.5+vs2013配置方法
- 将VS2013的C/C++标准库math中的59个函数过一遍
- C++ 操作法重载
- 《C++多线程编程实战》——2.8 线程的用法
- 《C++编程规范:101条规则、准则与最佳实践》——第一章组织和策略问题1.1不要拘泥于小节 (又名:了解哪些东西不应该标准化)
- 《数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)》——2.5 图像的显示
- 《C++编程惯用法——高级程序员常用方法和技巧》——1.6 问题
- 《数字图像处理与机器视觉——Visual C++与Matlab实现》——1章 Matlab图像处理编程基础
- 《数字图像处理与机器视觉——Visual C++与Matlab实现》——1.4 读取和写入图像文件
- C/C++ VS中调用matlab函数的方法
- 【Matlab 六自由度机器人】定义标准型及改进型D-H参数建立机器人模型(附MATLAB建模代码)
- 【Matlab算法】进退法迭代求解无约束一维极值问题(附进退法MATLAB代码)
- C++11 std::unique_lock与std::lock_guard区别及多线程应用实例
- 初学者必学项目之C++实现简易通讯录
- C++机器学习古典材料
- C++实现ftp客户端
- C++中的平方、开方、绝对值怎么计算